macOS下使用ZMODEM協議上傳/下載檔案
有時候,我們ssh登入伺服器操作(甚至經過跳板機),然後這個時候,我們想下載、上傳一個檔案,就必須重啟啟動一個終端,執行scp命令。這個非常的繁瑣,而且要上傳、下載的目錄也需要自己copy,有沒有辦法能夠在ssh會話中上傳、下載檔案呢?
查了下,還真有這麼一個協議,叫 ZMODEM 。
下載檔案
在伺服器上執行sz( S end by Z MODEM),先在終端上輸出 **B00000000000000
,然後客戶端在終端傳送指令,表示拒絕,還是接收(接收的話,在客戶端執行rz指令與服務端互動)
上傳檔案
在伺服器上執行rz( R eceive by Z MODEM),先在終端上輸出 rz waiting to receive.**B0100000023be50
,然後客戶端傳送指令,表示取消,還是上傳(上傳的話,在客戶端執行sz命令與服務端互動)。
可以看到在上述流程中,對Terminal的要求就是,遇到特殊指令,觸發對應的操作(執行本地命令)。
遺憾的是,我一直使用的、macOS自帶的Terminal.app不支援這個,所以我只能放棄Terminal.app,使用iTerm2(v3.3.0beta5)了。
如何配置
首先,安裝iTerm2:
brew cask info iterm2-beta
然後在本地安裝sz和rz命令:
brew install lrzsz
然後,下載給iTerm2用的rz、sz指令碼:
curl https://raw.github.com/mmastrac/iterm2-zmodem/master/iterm2-send-zmodem.sh -o /usr/local/bin/iterm2-recv-zmodem.sh curl https://raw.github.com/mmastrac/iterm2-zmodem/master/iterm2-recv-zmodem.sh -o /usr/local/bin/iterm2-send-zmodem.sh chmod a+x /usr/local/bin/iterm2-recv-zmodem.sh /usr/local/bin/iterm2-send-zmodem.sh
最後,配置iTerm2的觸發器(點選選單的Profiles,選擇某個profile之後然後繼續選擇advanced → triggers,新增triggers),配置器觸發如下:
Regular expression: rz waiting to receive.\*\*B0100 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-send-zmodem.sh Instant: checked Regular expression: \*\*B00000000000000 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-recv-zmodem.sh Instant: checked

最後測試:




參考資料: