SSH 错误:未知密钥类型‘-----BEGIN’

SSH 错误:未知密钥类型‘-----BEGIN’

我在使用授权密钥通过 SSH 登录远程服务器时遇到问题。我收到的错误消息如下:

OpenSSH_5.2p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to xx.xx.xx [xxx.xx.xx.xx] port 22.
debug1: Connection established.
debug3: Not a RSA1 key file /Users/bfenker/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
...
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /Users/bfenker/.ssh/id_rsa type 1
ssh_exchange_identification: Connection closed by remote host

该网站上的其他问题也发布了类似的问题,解决方案通常是仔细检查客户端的所有权限,我已经这样做了:

drwxr-xr-x+ 23 bfenker          staff   782 May  8 11:02 bfenker
drwx------   8 bfenker          staff   272 May  8 10:05 .ssh
-rw-------   1 bfenker  staff  1675 May  8 09:51 id_rsa
-rw-r--r--   1 bfenker  staff   418 May  8 09:51 id_rsa.pub
-rw-------   1 bfenker  staff   999 May  8 09:46 identity
-rw-r--r--   1 bfenker  staff   663 May  8 09:46 identity.pub
-rw-r--r--   1 bfenker  staff   416 May  8 09:06 known_hosts

我能够使用授权密钥通过 SSH 连接到另一台服务器,然后从这台服务器通过 SSH 连接到我想要的服务器。这是一个可行的解决方法,我正在尝试修复它,但我认为这也表明我的客户端和服务器都设置正确。

请注意,当我通过 SSH 成功连接到另一台服务器时,我收到相同的错误消息,但它似乎从以下行开始恢复:

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0

有人知道为什么这在某些情况下有效,但在我想要的情况下却无效吗? 如果有任何其他建议,我将不胜感激!

答案1

Necroquestion!基于你可以使用此密钥登录另一台服务器的事实,@michael-hampton 走在正确的道路上:目标服务器上有一些东西(防火墙/tcp 包装器/sshd 配置)拒绝访问。所有关于不正确密钥格式的讨论都是基于对调试信息的错误解释而制造的假象。行

debug1: identity file /Users/bfenker/.ssh/id_rsa type 1

表示 ssh 能够理解该密钥。

答案2

您的 SSH 密钥存储格式错误。OpenSSH 使用放在一行中的密钥。您需要ssh-keygen使用-i-m选项,请参阅man ssh-keygen。可能是以下之一:

ssh-keygen -m RFC4716 -i -f /Users/bfenker/.ssh/id_rsa

将输出用作新密钥文件(ssh-keygen ... >newkeyfile)。

编辑1:

请注意:“此选项将读取未加密私钥(或公钥)文件”

因此,可能需要使用能够理解该格式的程序将该文件更改为没有密码的文件。

答案3

我觉得这里的答案不太清楚。Mark Wagner 的答案确实涵盖了这一点,但没有完全解释情况。

输出中的行以调试级别为前缀,这也暗示了它们的重要性:但数字越小,意义就越大。这些debug3:东西远不如debug1:

读取密钥文件时,ssh 首先尝试将其解析为已弃用的 RSA 密钥(现在称为“RSA1”),这些密钥以SSH PRIVATE KEY FILE FORMAT和版本号开头。新的 RSA 密钥均以 开头-----BEGIN RSA PRIVATE KEY-----。以下是一次登录尝试,其中identity是旧的 RSA1 样式密钥,id_rsa是新样式密钥。

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/identity type 0
debug1: identity file /home/user/.ssh/identity-cert type -1
debug3: Not a RSA1 key file /home/user/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
[...]
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /home/user/.ssh/id_rsa type 1
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type -1
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1

此时,它已将文件中的密钥类型识别为 和identitytype 0它检查的其他文件不存在,因此为。id_rsatype 1type -1

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3

identity由于这是协议 2,因此在密钥交换期间将忽略协议 1 RSA 密钥。

debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/user/.ssh/id_rsa (0x5622d77426a0)
debug2: key: /home/user/.ssh/id_dsa ((nil))
debug2: key: /home/user/.ssh/id_ecdsa ((nil))

这里它提醒我们它想要使用的关键文件。不知道为什么它没有拒绝丢失的文件,只拒绝了协议 1 文件,但是...

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
[...]
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 372 bytes for a total of 1689
debug1: Server accepts key: pkalg ssh-rsa blen 277

这里它提供了id_rsa密钥并且被接受了。

因此,简而言之,问题标题中的问题是 ssh 尝试多种方式来解析它找到的密钥而产生的烟幕弹,而不是密钥的真正问题。

答案4

我最近也遇到了这个问题。在我的情况下,所有权限都是正确的,包括 .ssh、rsa 文件、主目录以及与用户相关的所有内容。问题是我在 .ssh 中有一个之前生成的公钥,它与我用于登录的私钥不对应。从 .ssh 中删除公钥解决了这个问题。

我正在使用 ssh-keygen 创建 .ssh 目录,这导致了这个公钥的出现,从而导致了问题。

相关内容