使用 ssh 將文件複製回本地系統
如果我通過 SSH 登錄到系統,有沒有辦法將文件複製回我的本地系統,而無需啟動另一個終端或螢幕會話並執行 scp 或類似的操作,或者無需從遠端系統執行 SSH 回本地系統?
主連接
如果您提前計劃,這是最簡單的。
第一次打開主連接。對於後續連接,通過現有的主連接路由從連接。在您的
~/.ssh/config
中,將連接共享設置為自動發生:ControlMaster auto ControlPath ~/.ssh/control:%h:%p:%r
如果您啟動與現有連接相同(使用者、埠、機器)的 ssh 會話,則第二個會話將通過第一個會話進行隧道傳輸。建立第二個連接不需要新的身份驗證,而且速度非常快。
因此,當您擁有活動連接時,您可以快速:
scp
用or複製文件rsync
;- 使用 sshfs 掛載遠端文件系統。
轉發
在現有連接上,您可以建立反向 ssh 隧道。
-R 22042:localhost:22
在 ssh 命令行上,通過傳遞其中 22042 是一個隨機選擇的數字,該數字不同於遠端電腦上的任何其他埠號,從而創建遠端轉發。然後ssh -p 22042 localhost
在遠端機器上將您連接回源機器;你可以scp -P 22042 foo localhost:
用來複製文件。您可以使用
RemoteForward 22042 localhost:22
. 這樣做的問題是,如果您使用多個 ssh 實例連接到同一台電腦,或者如果其他人正在使用該埠,您將無法獲得轉發。如果您沒有從一開始就啟用遠端轉發,您可以在現有的 ssh 會話上執行此操作。鍵入
Enter
~C
Enter
-R 22042:localhost:22
Enter
。有關詳細資訊,請參閱手冊中的“轉義字元”。在這個 Server Fault 執行緒中也有一些有趣的資訊。
複製粘貼
如果文件很小,您可以將其鍵入並從終端輸出中複製粘貼。如果文件包含不可列印的字元,請使用base64等編碼。
remote.example.net$ base64 <myfile *(複製輸出)*
local.example.net$ base64 -d >myfile *(粘貼剪貼板內容)* Ctrl +D
更方便的是,如果您啟用了 X 轉發,則將文件複製到遠端機器上並粘貼到本地。您可以通過管道將數據輸入和輸出
xclip
或xsel
。如果要保留文件名和元數據,請複制粘貼存檔。remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -