我一直在使用 curl(通过 git-ftp),并且只传递用户名和sftp
URL。
身份验证总是通过公钥隐式工作。
突然 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
可以。
libssh2 不支持一些后来的密钥,例如 ecdsa-sha2-nistp256 和 ssh-ed25519。
因此,如果您的.ssh/known_hosts中已经有这些密钥之一,则 libssh2 将失败。但是您可以添加 libssh2 支持的另一个密钥,例如 RSA:
要修复它,请从远程主机检索 RSA 公钥并将其添加到您的
known_hosts
文件中:ssh-keyscan hostname.example.com >> ~/.ssh/known_hosts
确切的格式和文件位置可能因系统而异。
我通过用文件内部的域替换 ipv6 地址来解决问题
known_hosts
。它碰巧已经存在于
known_hosts2
同一目录中的一个名为的文件中,但我猜这个文件实际上并没有被 ssh/curl 读取。