在两个远程SSH服务器之间传输文件


21

有没有一种简单的方法可以在两个SSH / SFTP服务器之间传输文件?完美的解决方案是FileZilla,但它只能让您在本地和远程之间创建连接,而不能在远程和远程之间创建连接。

从理论上讲,我可以打开两个Nautilus窗口并连接到一些ssh://server1/path/to/folderssh://server2/path/to/folder,然后就从一个拉文件到另一侧。我的经验是,这非常不稳定。传输大小为10MB的文件是没有问题的,但是传输10GB的文件通常会导致Nautilus挂起并保留在那里ps -e | grep nautilus-> kill -9 <pid>。我也与Nemo和Caja测试了同样的东西。尽管Nemo往往比其他两个更稳定,但它仍然不是完美的,并且会不时中断。FileZilla非常稳定,从来没有真正破坏过它,但是由于提到的事实它只能连接到单个SSH服务器,因此它不是非常灵活。

当然,我也可以使用安装文件夹sshfs,但这是一种不方便的解决方案。要进行简单的传输,需要做大量的准备工作。

是否有任何应用程序可以处理两个SSH服务器之间的传输而不会中断?完美的将是FileZilla之类的东西,如果连接中断,它将再次执行任务。


没有答案,因为这不是软件推荐站点,但是多年来我一直在使用(商业)Beyond Compare(scootersoftware.com),它对于完成此类任务非常有用。它提供了两个窗口,两个窗口都可以显示本地路径或sftp:// URL,将显示文件夹之间的差异,并且它能够复制差异的功能使它在中断时具有出色的恢复机制,这种情况很少发生在我的经验中。(除了成为满意的客户外,不隶属于他们)。
Guntram Blohm

Answers:


36

如果您使用的仍然是受支持的Ubuntu版本,那么您的scp命令将提供该-3开关,该开关允许通过localhost将文件从remote1复制到remote2

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

您也可以省略此-3开关,但是您将需要以下文件中的公钥(id_rsa.pub):user1@remote1authorized_keysuser2@remote2

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

scp然后在引擎盖下ssh user1@remote1首先进行并从那里开始 scp /path/to/file1 user2@remote2:/path/to/file2。这就是为什么必须以不同于-3解决方案的方式分发凭据的原因。

换一种说法:

  • scp -3 remote1:file1 remote2:file2将文件从remote1传输到localhost,然后再传输 回remote2。数据传输到remote1→localhost→remote2。该本地主机在此方案中的第三方,因此-3。为此,您将需要remote1remote2 上的localhost的凭据,因为localhost连接到它们两者。

  • scp remote1:file1 remote2:file2将文件以彼此连接的速度直接从remote1复制 到remote2本地主机不涉及(发出命令除外)。数据从remote1→remote2传输。为此,您 仅在remote1上需要localhost的凭据,remote2上也需要remote1的凭据,因为localhost 仅连接到remote1,然后remote1连接到remote2

如果可能的话,我会选择第二种方法。正如一些评论已经说过的:通常remote1remote2之间的网络电缆通常比它们和localhost之间的电缆粗得多。


2
那真漂亮。ssh是瑞士军刀软件。谢谢,我学到了一些东西。
有机大理石

4
请注意,这种方法与问题中描述的nautilus方法一样,将首先将文件传输到本地计算机,然后再传输到第二台服务器。当两个远程服务器之间的链接速度比本地计算机对两个远程服务器的链接速度快时,这将导致速度显着降低。(例如,当远程服务器位于数据中心中且本地计算机具有DSL连接时。)
Stobor

1
@Stobor好点,谢谢。我更新了答案,以澄清在不使用的情况下数据如何传输-3
PerlDuck

1
第二种方法是否可以与代理转发一起使用,而在remote1上没有任何密钥或密码?
艾里克·杜米尼尔

1
@EricDuminil恐怕我无法告诉。我没有代理转发的真正经验。但是我对此表示怀疑,因为当没有提供密钥和密码时,remote1应该被拒绝,不是吗?
PerlDuck

10

在大多数情况下,两台ssh服务器可以互相访问(或至少一台可以到达另一台),并且在大多数情况下,工作站的Internet远比两台服务器差。

如果是这样,那么订购一台服务器转移到另一台是可行的方法。

ssh server1 nohup scp somefile server2:somefile

nohup.out在server1上检查是否有错误。

如果服务器可达性是另一种解决方法,则可以将哪台计算机作为主服务器:

ssh server2 nohup scp server1:somefile somefile

7

也许您可以使用几个GUI前端之一进行rsync:

命令rsync是否有任何GUI应用程序?

或者,您可以直接从命令行使用rsync连接到两个远程服务器:

“如何在两个遥控器之间同步文件”

我经常使用ssh登录到一台服务器,然后从该服务器的命令行使用rsync将文件推入或拉出到另一台远程服务器上 -这通常比试图通过第三台计算机传输文件要快得多。

rsync非常聪明,可以执行一些工作,然后,如果出现任何错误并中断了进程,它可以稍后从中断处继续恢复。


0

您需要使用SCP协议。 scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save


2
OP希望在两台远程计算机之间复制文件,而不是从本地计算机复制到远程计算机。他似乎也在寻找GUI解决方案。
user68186

@ user68186我的答案是有效的。
Gravemind
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.