升级到Macos 10.13.2后,使用ssh以key方式登陆一个12年配置的服务器的时候,ssh命令报告了Invalid key length的错误。

很是纳闷,服务器和本地的key都是配置好后就没动过的,key pair本身肯定没问题啊,怎么会报错了呢?

原因

Google了一下,发现是MacOS使用的OpenSSH版本升级到了7.6,小于1024bits的RSA keys已经不被支持了。

使用ssh-keygen查看了一下public key,发现是1023bit的。所以ssh时候报了Invalid key length的错误。

1
2
3
$ ssh-keygen -lf carl.pub
1023 82:3e:bc:4c:e8:34:0e:f1:5b:44:e3:db:9b:c2:11:88 carl.pub (RSA)
$

解决方法

重新生成了一个长度为2048bit的新ssh keypair,并将公钥添加到服务器端,就可以解决该问题。

这个Invalid key length的错误,只是Macos的ssh客户端的行为,如果不换key,而使用一个允许小于1024bit的ssh客户端,原有的key仍然是可以登陆服务器的。

小测试

试验1024bit key length

使用ssh-keygen -t rsa -b 1024 -C "carl.shen@hello_aws" -f carl_1024生成key length为1024的keypair

使用私钥carl_1024登陆服务器,ssh客户端不会报告Invalid key length 的错误

1
2
3
$ ssh -i carl_1024 carl.shen@hello_aws
carl.shen@hello_aws: Permission denied (publickey).
$

试验2048bit key length

使用ssh-keygen -t rsa -b 2048 -C "carl.shen@hello_aws" -f carl_2048生成key length为2048的keypair

使用私钥carl_2048登陆服务器,ssh客户端就不会报告Invalid key length的错误

1
2
3
$ ssh -i carl_2048 carl.shen@hello_aws
carl.shen@hello_aws: Permission denied (publickey).
$

试验4096bit key length

使用ssh-keygen -t rsa -b 4096 -C "carl.shen@hello_aws" -f carl_4096生成key length为4096的keypair

使用私钥carl_4096登陆服务器,ssh客户端就不会报告Invalid key length的错误

1
2
3
$ ssh -i carl_4096 carl.shen@hello_aws
carl.shen@hello_aws: Permission denied (publickey).
$

尝试生成小于1024 bit的key失败

1
2
3
$ ssh-keygen -t rsa -b 1023 -C "carl.shen@hello_aws" -f carl_1023
Invalid RSA key length: minimum is 1024 bits
$

Reference

留言