Ssh
從伺服器獲取文件兩步之遙
我們有以下情況:
- 我的機器
- 網關機
- 目標機器
我對#2 和#3 都沒有root 權限。我也不能真正在機器#2 上儲存資訊(不超過 200 MiB)(因為它是進入網路其餘部分的網關,僅此而已)。在機器 #3 上有一個文件夾,大小約為 3 GiB,我想將其複製到本地。我不能從 #1 SSH 到 #3,但我可以 SSH 到 #2,然後到 #3。也無法在#2 和#3 之間設置公共私鑰對,但在#1 和#2 之間安裝了一個密鑰對。
通常我使用 SSH 和 tar 的組合來完成這項工作:
ssh name@host "tar cf - folder" > folder.tar
但在這種情況下,這需要某種嵌套,而我似乎無法完成這項工作。
那麼,將數據從 #3 獲取到 #1 的好方法是什麼?
您可以通過 machine2 創建一個 SSH 隧道,然後在另一個會話中連接到該隧道。
例如,在 machine1 上打開兩個 CLI 會話。在第一個會話中執行以下命令:
MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2
在第二個會話中執行以下命令:
MACHINE1 $ ssh -p 2022 <user>@localhost
第一個命令發生的情況是本地埠(machine1 上的 2022)正在使用您與 machine2 的 SSH 連接通過隧道連接到 machine3 上的埠 22。
使用第二個命令,您將連接到新打開的本地埠(2022),就像您直接連接到 machine3。
現在,如果您想使用典型的文件傳輸過程,您可以執行以下操作:
ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar
或者,您可以熟悉 rsync 並執行以下操作:
rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/
假設最終目標不是獲取 tarball。