scp user1@host1:somefile user2@host2:somefile

gar*_*eam 2 ssh sftp scp

当我尝试执行

scp user1@host1:somfile user2@host2:somfile

我得到

Host key verification failed.

lost connection

对两台主机的身份验证都是基于 ssh 密钥的,但是出于安全原因,私钥仅存储在发出上述命令的主机上。

此设置中的另一个复杂问题是,host2 仅支持 SFTP,因此无法访问 shell。

我还使用较旧的 openssl/openssh(Debian lenny openssh-client 5.1)组合和从源代码(openssl 1.0.0c,openssh 5.8)构建的最新 openssl/openssh 版本进行了测试。同样的行为。

还值得一提的是,执行

scp user1@host1:somfile somfile

scp somfile user2@host2:somfile

依次通过临时文件工作。

我在这里做错了什么?

use*_*686 6

在 OpenSSH 5.7 之前,两台主机之间的复制是直接完成的。换句话说,连接到host2host1,使用host1的已知主机密钥列表。

  • 您可以通过简单地连接到host2known_hosts文件来添加到该文件host1。然后使用代理转发host1使用本地运行的代理进行身份验证:

    ssh -oForwardAgent=yes host1 ssh host2 true
    
    scp -oForwardAgent=yes user1@host1:somfile user2@host2:
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    scp -3 user1@host1:somfile user2@host2:
    
    Run Code Online (Sandbox Code Playgroud)

    这可能会慢得多,因为host1?你 ?host2.