2015-10-20 10 views
1

我试图从实例使用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上成功尝试的。

回答

0

我仍然不确定是什么原因。
我只能猜测,我掉进了这里所描述的错误:
cURL sftp public key authentication fails "Callback Error"

代码运行得很好而没有密码的关键。
我仍然很难说这是确切的解决方案,因为当我刚开始使用libssh2时,它运行良好,密钥与密码短语。 不过,它现在“工作”。