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

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

有没有一种简单的方法可以在两个 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,如果连接中断,它可以再次接手工作。

答案1

如果你使用的 Ubuntu 版本仍然受支持,那么你的scp命令将提供-3允许从远程1远程2通过本地主机

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将文件从 远程1本地主机然后回到远程2. 数据传输远程1 → 本地主机 → 远程2。 这本地主机是此场景中的第三方,因此-3。要实现此目的,您需要以下人员的凭证:本地主机 双方远程1远程2因为本地主机连接它们两个。

  • scp remote1:file1 remote2:file2直接从复制文件 远程1远程2它们相互连接的速度。本地主机这里不涉及(除了发出命令)。数据传输远程1 → 远程2。要实现此功能,您需要以下人员的凭证:本地主机 只在远程1 此外,您还需要以下凭证远程1远程2因为本地主机连接到远程1 只有然后远程1连接到远程2

如果可能的话,我会选择第二种方法。正如一些评论所说:通常情况下,远程1远程2比它们之间的电缆要粗得多,本地主机

答案2

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

如果是这样,命令一台服务器转移到另一台服务器是正确的做法。

ssh server1 nohup scp somefile server2:somefile

检查nohup.outserver1 上是否有错误。

如果服务器可达性相反,你可以反转哪台机器是主机器:

ssh server2 nohup scp server1:somefile somefile

答案3

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

是否有用于命令 rsync 的 GUI 应用程序?

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

“如何在两个远程服务器之间 rsync 文件”

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

rsync 足够智能,可以完成一些工作,然后如果出现任何问题并中断该过程,它可以稍后从中断的地方恢复。

答案4

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

相关内容