我试图使用libssh2 scp从实例中检索文件 为了确保我的用户名,密码和密钥正确,我做了:
sudo scp -v -P #port -i /home/username/.ssh/id_rsa username@XX.XX.XX.XX:/home/username/file .
其中要求我输入密码,然后成功检索到该文件
在试图用libssh2完成同样的事情时,我按照这里的例子:
http://www.libssh2.org/examples/scp.html
随着变量类型的表面变化,似乎已经改变了
(并不重要,因为这些变量在认证之后出现)。
但是,
libssh2_userauth_publickey_fromfile(session, username,"/home/username/.ssh/id_rsa.pub","/home/username/.ssh/id_rsa",password)
程序始终以LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED退出 使用gdb检查,我确定要应用的用户名和密码是正确的。
可能导致此问题的原因是什么?
编辑:
进一步深入研究GDB后,在_libssh2_userauth_publickey(session,username,username_len,pubkeydata,pubkeydata_len,sign_callback,abstract)的深度libssh2_userauth_publickey_fromfile()中,它会收到一个LIBSSH2_ERROR_SOCKET_RECV。 然而,背后的代码对我未经训练的眼睛来说太神秘了。
我错过的一个显而易见的事情就是错误消息,它出现了"等待USERAUTH响应"
潜在相关:
https://github.com/nodegit/nodegit/issues/553
在遵循我从上面链接收集的一些小建议并从authorized_keys中删除几个键之后,错误保持不变,但消息更改为" Callback返回错误"。不确定是否改善或更糟。
检查服务器端日志,我发现以下内容:
Oct 20 06:53:51 testbed1 sshd[25837]: error: Could not load host key: /etc/ssh/keyname
Oct 20 06:53:52 testbed1 sshd[25837]: Connection closed by XX.XX.XX.XX [preauth]
Oct 20 06:54:48 testbed1 sshd[25839]: error: Could not load host key: /etc/ssh/keyname
Oct 20 06:54:51 testbed1 sshd[25839]: Accepted publickey for username from...
前两行是从libssh2尝试失败的。
接下来的两行是在命令行上成功尝试scp。
答案 0 :(得分:0)
我仍然不能确定原因是什么
我只能推测我陷入了这里描述的错误:
cURL sftp public key authentication fails "Callback Error"
代码在没有密码的密钥上运行正常 我仍然很难说这是确切的解决方案,因为当我刚刚开始使用libssh2时,它使用带密码的密钥运行良好。 它仍然适用于#34;现在