Ssh

從伺服器獲取文件兩步之遙

  • September 25, 2017

我們有以下情況:

  1. 我的機器
  2. 網關機
  3. 目標機器

我對#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。

引用自:https://serverfault.com/questions/874779