簡體   English   中英

在多個級別或 SSH 躍點上使用 rsync 或 scp 復制文件

[英]Copy file with rsync or scp over multiple level or hops of SSH

我需要將大約 4.2 GB 的文件從local computerserver B 但是,要通過 ssh 連接到服務器 B,我需要通過 ssh 連接到server A

目前,我正在將文件從local computer復制到服務器 A,然后從server A復制到server B

所以流程是這樣的:

rsync -avz --del ~/Desktop/abc/ <my-user-name>@<server-A>:~/abc

rsync -avz --del ~/Desktop/abc/ <my-user-name>@<server-B>:~/abc

這很慢並且復制 4.2 GB 的數據兩次而不是一次!

我可以使用rsync將文件從本地計算機直接傳輸到server B嗎?

您始終可以使用ssh with proxy命令,它允許您透明地傳輸文件。 使用此配置(〜/ .ssh / config):

Host <server-A>
    User <user-A>

Host <server-B>
    User <user-B>
    ProxyCommand ssh <server-A> -W %h:%p

你可以調用你的rsync:

rsync -avz --del ~/Desktop/abc/ <server-B>:~/abc

數據將僅在中間主機上“路由”。

你想要的是使用端口轉發到從服務器B上的SSH / rsync的端口(通常端口22)轉發到備用端口在服務器A上,所以當你打電話rsync -e "ssh -p altport" serverA:/sourcedir /destdir ,你實際上是從serverB調用rsync。

StackExchange和其他網站上有很多好的方法。 例如:

會讓你開始。 使用端口轉發,您實際上使用serverA作為傳遞主機,因此您只需要傳輸4.2G一次。

是的,您可以直接復制文件(甚至文件夾),而無需在聯系人/登錄服務器上進行任何中間副本,默認情況下,這是外部世界已知的機器,或者聯系以訪問特定本地網絡。

下面是使用scp的簡單演示,沒有任何不必要的復雜性。 在本地機器上,只需執行以下操作:

$ scp -r -o ProxyCommand="ssh -W %h:%p your_username@contact-server.de"  /path/to/the/folder/that/needs/to/be/copied  your_username@machine_name:/file/path/on/this/machine
  • -r選項指示scp復制整個文件夾的內容。
  • your_username在兩台機器上不必相同。

如果成功,您將被要求在兩台機器上輸入密碼以進行身份​​驗證。

在上面的命令中,假設訪問名為“machine_name”的機器的典型方法是通過聯系服務器。


筆記:
上述命令也適用於將數據從源遠程機器(例如s )傳輸到目標遠程機器(例如t )。 在這種情況下,首先ssh到源遠程機器( s )並導航到數據所在的路徑。 之后,您可以簡單地將該遠程機器視為/視為本地/源機器,然后只需使用上面列出的相同scp命令來復制文件夾。

要復制單個文件,只需刪除-r選項並提供要復制的特定文件的路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM