我已经使用 curl(通过 git-ftp)一段时间了,并且只传递用户名和 URL sftp
。
身份验证总是通过公钥隐式地进行。
突然间,curl 不再通过 SSH 连接 —— 显然是因为它没有获取主机密钥,因此拒绝连接:
Trying {IP}... * Connected to host.example.com ({IP}) port 22 (#0) * SSH MD5 fingerprint: {Fingerprint} * SSH host check: 2, key: <none> * Closing connection 0
为什么curl无法获取密钥?
与工作连接ssh -v
并确实给我 2 个主机密钥,也curl --insecure
可以工作。
答案1
libssh2 不支持一些较新的密钥,如 ecdsa-sha2-nistp256 和 ssh-ed25519。
因此,如果你的电脑中已经有了这些密钥之一.ssh/已知主机,libssh2 将失败。但您可以添加 libssh2 支持的另一个密钥,例如 RSA:
要修复此问题,请从远程主机检索 RSA 公钥并将其添加到您的known_hosts
文件中:
ssh-keyscan hostname.example.com >> ~/.ssh/known_hosts
确切的格式和文件位置可能因系统而异。
答案2
我通过将文件内的 ipv6 地址替换为域来解决了该问题known_hosts
。
碰巧它已经存在于known_hosts2
同一目录中名为的文件中,但我猜测该文件实际上并未被 ssh/curl 读取。