首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用libssh2 scp从cmd检索文件时,当scp运行时无法进行身份验证。

使用libssh2 scp从cmd检索文件时,当scp运行时无法进行身份验证。
EN

Stack Overflow用户
提问于 2015-10-20 08:21:58
回答 1查看 833关注 0票数 1

我正在尝试使用libssh2 scp从实例中检索一个文件。

为了确保我的用户名、密码和密钥是正确的,我做到了:

代码语言:javascript
运行
复制
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

对变量类型的表面更改,而这些类型似乎已经发生了变化。

(这并不重要,因为这些变量是在身份验证之后出现的)。

然而,在

代码语言:javascript
运行
复制
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中删除几个键之后,错误保持不变,但是消息更改为“回调返回错误”。不确定是改善还是更糟。

通过检查服务器端日志,我发现以下内容:

代码语言:javascript
运行
复制
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在命令行上的成功尝试。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 02:54:09

我还是不确定原因是什么。

我只能推测,我陷入了这里描述的bug:

cURL sftp public key authentication fails "Callback Error"

该代码在没有密码的密钥上运行良好。

我仍然很难说这是正确的解决方案,因为当我刚开始使用libssh2时,它可以很好地使用带有密码的密钥。不过,现在“起作用了”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33231547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档