当我尝试执行
scp user1@host1:somfile user2@host2:somfile
我明白了
Host key verification failed.
lost connection
对两个主机的身份验证都是基于 ssh-key 的,但出于安全原因,私钥仅存储在发出上述命令的主机上。
此设置的另一个复杂之处是,host2 仅限 SFTP,因此无法访问 shell。
我还测试了较旧的 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
依次通过临时文件进行工作。
我在这里做错了什么?
答案1
直到 OpenSSH 5.7,两个主机之间的复制都是直接进行的。换句话说,建立host2
到从host1
,使用host1
已知主机密钥列表。
您可以通过简单地连接到它来添加
host2
到文件。然后使用known_hosts
host1
代理转发host1
使用本地运行的代理进行身份验证: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
。
答案2
您没有运行 ssh-agent 吗?