Ssh

使用 ssh 將文件複製回本地系統

  • October 28, 2020

如果我通過 SSH 登錄到系統,有沒有辦法將文件複製回我的本地系統,而無需啟動另一個終端或螢幕會話並執行 scp 或類似的操作,或者無需從遠端系統執行 SSH 回本地系統?

主連接

如果您提前計劃,這是最簡單的。

第一次打開主連接。對於後續連接,通過現有的主連接路由從連接。在您的~/.ssh/config中,將連接共享設置為自動發生:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

如果您啟動與現有連接相同(使用者、埠、機器)的 ssh 會話,則第二個會話將通過第一個會話進行隧道傳輸。建立第二個連接不需要新的身份驗證,而且速度非常快。

因此,當您擁有活動連接時,您可以快速:

轉發

在現有連接上,您可以建立反向 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 轉發,則將文件複製到遠端機器上並粘貼到本地。您可以通過管道將數據輸入和輸出xclipxsel。如果要保留文件名和元數據,請複制粘貼存檔。

remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -

引用自:https://unix.stackexchange.com/questions/2857