scp user1 @ host1:somefile user2 @ host2:somefile

当我尝试执行一个

scp user1@host1:somfile user2@host2:somfile

我明白了

Host key verification failed.

lost connection

两台主机的身份validation都是基于ssh-key的,但是出于安全原因,私钥只存储在发出上述命令的主机上。

在这个设置中的另一个复杂的是,host2是SFTP专用的,所以没有shell访问。

我testing了一个较老的openssl / openssh(Debian lenny openssh-client 5.1)组合和一个最新的openssl / openssh发行版(openssl 1.0.0c,openssh 5.8)。 同样的行为。

这也是值得一提的是执行

scp user1@host1:somfile somfile

scp somfile user2@host2:somfile

依次通过一个临时文件工作。

我在这里做错了什么?

在OpenSSH 5.7之前,直接在两台主机之间进行复制。 换句话说,与host2的连接是由host1 ,使用host1的已知host1密钥列表。

  • 您可以通过连接host2将host2添加到host1的known_hosts文件中。 然后使用代理转发让host1使用您的本地运行代理进行身份validation:

     ssh -oForwardAgent=yes host1 ssh host2 true scp -oForwardAgent=yes user1@host1:somfile user2@host2: 

    ( ssh有一个快捷方式-A这个选项,也可以添加到~/.ssh/config 。)

  • 在5.7及更高版本中,您可以使用scp -3强制通过计算机进行复制:

     scp -3 user1@host1:somfile user2@host2: 

    这可能会慢得多,因为host1 →你→ host2 。

你没有运行ssh-agent吗?