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

Soc*_*tes 21 ssh nautilus transfer caja nemo

有没有一种在两个 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 服务器之间的传输?Perfect 就像 FileZilla 那样,如果连接中断,它会再次接手工作。

Per*_*uck 37

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

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2
Run Code Online (Sandbox Code Playgroud)

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

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2
Run Code Online (Sandbox Code Playgroud)

scp然后在引擎盖下ssh user1@remote1先从那里开始 scp /path/to/file1 user2@remote2:/path/to/file2。这就是凭证必须与-3解决方案不同的原因。

换句话说:

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

  • scp remote1:file1 remote2:file2以它们相互连接的速度将文件直接从remote1复制 到remote2。这里不涉及本地主机(除了发出命令)。数据远程传输 1 ? 远程2。为此,您 只需要在remote1上使用来自localhost的凭据,另外您还需要在remote2上使用remote1 的凭据,因为localhost 仅连接到remote1,然后remote1连接到remote2

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

  • 请注意,这种方法与问题中描述的 nautilus 方法一样,将首先将文件传输到本地计算机,然后再传输到第二台服务器。当两个远程服务器之间的链接比本地机器更快时,这将导致显着的减速。(例如,当远程服务器位于数据中心并且本地计算机具有 DSL 连接时。) (4认同)
  • 那只是美丽。ssh 是软件的瑞士军刀。谢谢,我学到了一些东西。 (2认同)

Jos*_*hua 10

在大多数情况下,两个 ssh 服务器可以相互访问(或至少一个可以访问另一个),而且在大多数情况下,工作站的 Internet 比任何一个服务器都差得多。

如果是这样,命令一台服务器转移到另一台服务器是要走的路。

ssh server1 nohup scp somefile server2:somefile
Run Code Online (Sandbox Code Playgroud)

nohup.out在 server1 上检查错误。

如果服务器可达性是另一种方式,您可以反转哪台机器是主机:

ssh server2 nohup scp server1:somefile somefile
Run Code Online (Sandbox Code Playgroud)


Dav*_*ary 7

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

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

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

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

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

rsync 足够聪明,可以做一些工作,然后如果出现任何问题并中断进程,它可以稍后从中断的地方恢复。