gpt4 book ai didi

c - 当来自 cmd 的 scp 工作时,使用 libssh2 scp 检索文件无法进行身份验证

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:53 33 4
gpt4 key购买 nike

我正在尝试使用 libssh2 scp 从实例中检索文件。
为了确保我的用户名、密码和 key 正确无误,我做了:

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_fromfile() 的某处,在 _libssh2_userauth_publickey(session, username, username_len, pubkeydata, pubkeydata_len, sign_callback, abstract) 中,它接收到一个 LIBSSH2_ERROR_SOCKET_RECV。
然而,其背后的代码对于我未经训练的眼睛来说太神秘了,无法理解。

我错过的一件明显的事情是错误消息,结果是“等待用户授权响应”
潜在相关: https://github.com/nodegit/nodegit/issues/553

按照我从上面的链接收集到的一些小建议并从 authorized_keys 中删除一些 key 后,错误仍然相同,但消息更改为“回调返回错误”。不确定是改善还是恶化。

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

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 成功尝试。

最佳答案

我仍然不确定是什么原因。 我只能推测我陷入了此处描述的错误:
cURL sftp public key authentication fails "Callback Error"

代码在没有密码的 key 上运行良好。
我仍然很难说这是确切的解决方案,因为当我刚开始使用 libssh2 时,它使用带密码的 key 运行良好。不过,它现在“有效”了。

关于c - 当来自 cmd 的 scp 工作时,使用 libssh2 scp 检索文件无法进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231547/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com