我试图从实例使用libssh2 scp检索文件。
只是为了确保我的用户名,密码和密钥是正确的,我所做的:使用libssh2 scp检索文件无法验证scd从cmd工作
sudo scp -v -P #port -i /home/username/.ssh/id_rsa [email protected]:/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_fromfile的深度某处(),在_libssh2_userauth_publickey(会话,用户名,username_len,pubkeydata,pubkeydata_len,sign_callback,摘要),它接收到一个LIBSSH2_ERROR_SOCKET_RECV。然而,背后的代码对于未经训练的眼睛来说太过神秘。
我已经错过了一个明显的事情是错误信息,出来是“等待响应USERAUTH”
可能相关: https://github.com/nodegit/nodegit/issues/553
以下哪有点意见,我可以从上面的链接收集后从authorized_keys中删除几个密钥,错误保持不变,但消息更改为“回叫返回错误”。不知道如果改善或更糟。
检查服务器端的日志,我发现以下几点:
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上成功尝试的。