Ssh
scp user1@host1:somefile user2@host2:somefile
當我嘗試執行
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/openssh 版本(openssl 1.0.0c、openssh 5.8)進行了測試。相同的行為。
還值得一提的是,執行
scp user1@host1:somfile somfile
scp somfile user2@host2:somfile
按順序通過臨時文件工作。
我在這裡做錯了什麼?
在 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
由於→ you →host2
,這可能會慢得多。