有没有一种简单的方法可以在两个 SSH/SFTP 服务器之间传输文件?完美的解决方案是 FileZilla,但它只允许您在本地和远程之间建立连接,而不能在远程和远程之间建立连接。
理论上,我可以打开两个 Nautilus 窗口并连接到其中一个ssh://server1/path/to/folder
,ssh://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@remote1
authorized_keys
user2@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.out
server1 上是否有错误。
如果服务器可达性相反,你可以反转哪台机器是主机器:
ssh server2 nohup scp server1:somefile somefile
答案3
也许您可以使用以下几个 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