Windows 10 说有效密钥“id_rsa”使用了无效格式

Windows 10 说有效密钥“id_rsa”使用了无效格式

我从一台 Linux Debian 机器上取了一对密钥,它工作正常。但是,当我在 Windows 10 机器上尝试使用 Power Shell 的 ssh 服务时,它不起作用,错误消息以“key_load_public:没有这样的文件或目录”开头,然后是“加载密钥“C:\Users\clebe/.ssh/id_rsa”:格式无效”。正确的私钥是 .ssh 文件夹中的 id_rsa 文件

PS C:\Users\clebe> ssh [email protected] -vvv
OpenSSH_7.5p1, without OpenSSL
debug3: Failed to open file:C:\\Users\\clebe/.ssh/config error:2
debug3: Failed to open file:./ssh_config error:2
debug2: resolving "X.X.X.X" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to X.X.X.X [X.X.X.X] port 22.
debug3: socket:480, socktype:1, io:00000190FC669EA0, fd:3
debug1: Connection established.
key_load_public: invalid format
debug1: identity file C:\\Users\\clebe/.ssh/id_rsa type -1
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_rsa-cert error:2
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_rsa-cert.pub error:2
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\clebe/.ssh/id_rsa-cert type -1
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_dsa error:2
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_dsa.pub error:2
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\clebe/.ssh/id_dsa type -1
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_dsa-cert error:2
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_dsa-cert.pub error:2
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\clebe/.ssh/id_dsa-cert type -1
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_ed25519 error:2
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_ed25519.pub error:2
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\clebe/.ssh/id_ed25519 type -1
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_ed25519-cert error:2
debug3: Failed to open file:C:\\Users\\clebe/.ssh/id_ed25519-cert.pub error:2
debug1: key_load_public: No such file or directory
debug1: identity file C:\\Users\\clebe/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.5
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.7p1 Debian-5+deb8u3
debug1: match: OpenSSH_6.7p1 Debian-5+deb8u3 pat OpenSSH* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to X.X.X.X:22 as 'cleber'
debug3: hostkeys_foreach: reading file "C:\\Users\\clebe/.ssh/known_hosts"
debug3: record_hostkey: found key type ED25519 in file C:\\Users\\clebe/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from X.X.X.X
debug3: Failed to open file:C:\\Users\\clebe/.ssh/known_hosts2 error:2
debug3: Failed to open file:./ssh_known_hosts error:2
debug3: Failed to open file:./ssh_known_hosts2 error:2
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],ssh-ed25519
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,[email protected],ext-info-c
debug2: host key algorithms: [email protected],ssh-ed25519
debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr
debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none
debug2: compression stoc: none
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: [email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ssh-ed25519
debug2: ciphers ctos: aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],[email protected]
debug2: ciphers stoc: aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],[email protected]
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected]
debug2: compression stoc: none,[email protected]
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ssh-ed25519
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ssh-ed25519 SHA256:N60fODxHIhAgCZNIOKI07KlqsHOK5XN3ENQDZaCZXWM
debug3: hostkeys_foreach: reading file "C:\\Users\\clebe/.ssh/known_hosts"
debug3: record_hostkey: found key type ED25519 in file C:\\Users\\clebe/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from X.X.X.X
debug3: Failed to open file:C:\\Users\\clebe/.ssh/known_hosts2 error:2
debug3: Failed to open file:./ssh_known_hosts error:2
debug3: Failed to open file:./ssh_known_hosts2 error:2
debug1: Host 'X.X.X.X' is known and matches the ED25519 host key.
debug1: Found key in C:\\Users\\clebe/.ssh/known_hosts:1
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 134217728 blocks
debug3: socket:0, socktype:1, io:00000190FC66A000, fd:4
debug3: close - io:00000190FC66A000, type:2, fd:4, table_index:4
debug2: key: C:\\Users\\clebe/.ssh/id_rsa (0000000000000000)
debug2: key: C:\\Users\\clebe/.ssh/id_dsa (0000000000000000)
debug2: key: C:\\Users\\clebe/.ssh/id_ed25519 (0000000000000000)
debug3: send packet: type 5
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: C:\\Users\\clebe/.ssh/id_rsa
debug3: open - handle:000000000000021C, io:00000190FC669A80, fd:4
debug3: close - io:00000190FC669A80, type:2, fd:4, table_index:4
Load key "C:\\Users\\clebe/.ssh/id_rsa": invalid format
debug1: Trying private key: C:\\Users\\clebe/.ssh/id_dsa
debug3: GetFileAttributesExW with last error 2
debug3: no such identity: C:\\Users\\clebe/.ssh/id_dsa: No such file or directory
debug1: Trying private key: C:\\Users\\clebe/.ssh/id_ed25519
debug3: GetFileAttributesExW with last error 2
debug3: no such identity: C:\\Users\\clebe/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey).

如何修复?

答案1

OpenSSH_7.5p1, without OpenSSL

此版本/副本的 OpenSSH 已编译没有 OpenSSL,该选项会导致许多功能无法使用,其中包括 RSA 密钥对。注意

debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,[email protected],ext-info-c
debug2: host key algorithms: [email protected],ssh-ed25519

列表仅有的ed25519,尽管 KEXINIT 并不直接控制客户协议中的身份验证也存在同样的限制。如果 OpenSSH 给出更具体的错误消息就好了;如果您足够关心,可以提交错误报告。

这是 Windows 自带的版本吗,还是你自己安装(或构建)的?我隐约记得 2018 年 WSL 还没有完全出炉,尽管我没有用过,也没有关注细节。我知道我在 2018 年末买的 W10 机器2019随之而来的 OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5支持 RSA(和 DSS,尽管自 IIRC 7.0 以来,根据上游策略,默认情况下已禁用此功能)。(如果您不知道,LibreSSL 是 OpenSSL 的一个分支,并且在此方面功能等效。)

答案2

Invalid Format在Windows 10id_rsa中,使用ssh.exe例如OpenSSH

C:\Users\tong> C:\"Program Files"\Git\usr\bin\ssh.exe -V
OpenSSH_9.2p1, OpenSSL 1.1.1t  7 Feb 2023

确保id_rsa文件在 中LF,换行符(不是CRLF)。并且文件末尾必须有一个空行。

可以使用以下方式检查/更改它VS Code,打开文件右下角显示换行格式(LF or CRLF)。最重要的是最后空白的新行,在第 39 行。见图。

那么该文件对 来说应该是有效的ssh。请注意,使用 时不会发生这种情况Microsoft ssh

在此处输入图片描述

相关内容