Curl 无法读取known_hosts 文件

Curl 无法读取known_hosts 文件

curl我正在尝试使用另一台 Centos 6 服务器作为客户端并使用协议从 Centos 6 服务器下载文件scp,我收到以下错误输出:

$ curl -v -O scp://cz/path/to/file
* About to connect() to cz port 22 (#0)
*   Trying 1.2.3.4... connected
* Connected to cz (1.2.3.4) port 22 (#0)
* Failed to read known hosts from /home/cpn/.ssh/known_hosts
* SSH host check: 0, key: AAAAB3NzaC1yc2EAAAABIwAAAQEAyeeDgYFsHi3Ks3PxCXt69IHBr7yNII720sXOm9WKIdGnwPf7QHbLsMf41mctcGRSJ2yO2EXpNEbZQhdUqs3oImdTn2OHF/K8STK1GXMVseusgmPuQWBt36AVPon7h9lSCjtxt+1UpFJoireXvhUDlgg9i1C9QbE04GAmA7vMOmtcVt3/3F6X/hKhOZvHj1gu5+RzCO8fXo2R8XeRoN0GcU2jVOhug0G+hXAiHymh5JzVm4YlCzsNIv3mDOF2lZRLdkor5FDKjBY8/o/5O8U0lWm4ie2S7qDppqCJP2SnNTWlaM3k5HDmdyEKKZ0lV+qG33q3ADZxjBeIKQtWLZfC3w==
* SSH authentication methods available: publickey,gssapi-keyex,gssapi-with-mic,password
* Using ssh public key file /home/cpn/.ssh/id_dsa.pub
* Using ssh private key file /home/cpn/.ssh/id_dsa
* SSH public key authentication failed: Username/PublicKey combination invalid
* Authentication failure
* Closing connection #0

scp我可以不问问题地下载该文件:

$ scp cz:/path/to/file .

我可以再次登录服务器,ssh无需询问任何问题

$ ssh cz

服务器的文件中同时存在ssh-rsa和密钥ssh-dssauthorized_keys

到底curl在抱怨什么?我唯一的猜测是curl需要dsa客户known_hosts文件中的密钥。如果是这样的话如何生成呢?或者如何在该文件中curl查找密钥?rsa

更新

在客户端:

$ ls -l /home/cpn/.ssh/known_hosts
-rw-r--r--. 1 cpn cpn 1970 Nov 12 16:12 /home/cpn/.ssh/known_hosts

答案1

我至少可以解释可能发生的情况:.输出中的权限后面ls -l表示存在 SELinux 策略,该策略根据访问文件的程序覆盖文件权限。用于ls -Z ~/.ssh/known_hosts显示文件的策略。

据推测,/usr/bin/ssh及其配套程序(ssh-keygenscp等)是唯一允许访问该文件的程序。我对此政策持怀疑态度:~/.ssh/known_hosts有时手动编辑很有用。但是我不明白为什么curl想要读取该文件而不是让ssh朋友们这样做。

您可以使用chcon命令编辑该文件的策略,以及restorecon恢复默认策略。请参阅CentOS 维基有关 SELinux 的更多信息。

答案2

对于通过谷歌找到此页面的人:

看起来旧版本的 cURL 会因known_hosts无法识别的密钥类型的文件而阻塞,并且足够旧的 cURL 版本无法识别任何密钥类型,但ssh-rsa.

例如,我的 cURL 是版本 7.29.0(已有 6 年历史,是撰写本文时 CentOS 7 中可用的最新版本),并且将在第一个之后停止读取密钥,这是我文件ecdsa-sha2-nistp256中的大部分密钥。known_hosts

答案3

谢谢 - 清除我的known_hosts 文件使该错误消失。这不是一个长期的解决方案,但可以作为一次性解决方法。

相关内容