如何使用来自第三台本地计算机的scp在两台远程服务器之间传输文件?

时间:2015-03-03 12:01:41

标签: unix ssh scp

我正在尝试将文件从一个远程服务器复制到本地计算机上的另一个远程服务器。 这是我正在尝试做的事情

localA $ scp userB@remoteB:/path/to/file userC@remoteC:/path

问题是我需要在远程计算机上为userB和userC传递两个密码。

根据Garron,上述情况应该有效,但我被许可拒绝了。

Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive).
lost connection

有什么建议吗?

5 个答案:

答案 0 :(得分:31)

如果您可以从本地(本地 - > remote1& local - > remote2)ssh到两个远程服务器,那么您可以尝试:

ssh -A -t user1@remote1 scp srcpath user2@remote2:destpath

这将直接使用您的本地凭据从 remote1 转移到 remote2

如果您不想被要求输入密码,则应在遥控器上设置 authorized_keys 文件。

答案 1 :(得分:30)

超级用户已存在此问题:

https://superuser.com/questions/686394/scp-between-two-remote-hosts-from-my-third-pc

scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

如上所述,-3选项指示scp通过发出命令的PC路由流量。

如果remote1和remote2在同一网络上,则上述情况属实。

如果不是: - 您必须使用端口转发

答案 2 :(得分:3)

这可以使用linux终端中的以下命令行:

scp -3 user1 @ ip:path / from / directory / user2 @ ip:path / to / directory

会出现一个提示,要求输入以下密码:

user1 @ ip的密码:user2 @ ip的密码:

如果您在第一个密码后按Enter键按顺序给两个密码,它应该接受但不会。即使您按顺序再次提供两个密码,但在第一个密码后没有按Enter键,它也不会再接受。

您必须首先提供user2,然后按Enter键,然后输入user1的密码并按Enter键。这将有效。

我知道这听起来不对,但只有这样才行。这是scp中的错误

答案 3 :(得分:1)

如果authorised_keys文件中没有条目,则只需要密码。登录到2台服务器(localA - > remoteB& remoteB - > remoteC)并建立安全连接后,您的原始命令应该可以正常工作。

答案 4 :(得分:1)

现有答案假定您可以从远程计算机回切到本地计算机。并非总是可能的。在这种情况下,您可以使用jump host mechanism。无论如何,它实际上更有效。


如果您有最新的OpenSSH(8.0),则可以使用-J (jump) switch

scp -J user@intermediate user@target:/path

对于较旧的版本(但至少为7.3),您可以在命令行中使用ProxyJump directive

scp -o ProxyJump=user@intermediate user@target:/path

ssh_config文件中。


还有其他选项,例如ProxyCommand或端口转发,甚至可以在旧版本的OpenSSH上使用。这些内容涵盖在Does OpenSSH support multihop login?