新申请了一台aws亚马逊云服务器,在和另外一台装有旧版本ssh的服务器通信时遇到了问题,表现为已经配置了免密,但是却无法免密登录。

文章目录

分析原因解决问题历史遗留或兼容性问题旧版ssh服务器到awsaws到旧版ssh服务器

分析原因

其中一个可能得原因是aws服务器使用的是新版ssh服务,默认不提供ssh-rsa密钥签名算法的支持1 。

先测试下:从aws服务器ssh到旧版ssh服务器

ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa username@old_server

ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa username@old_server

如果还是不能免密(前提是已经配置好免密),可能是aws服务器上生成的密钥对不是rsa密钥算法生成的。

主要的密钥算法有以下几种:

dsa 不推荐ecdsa 一般都支持,推荐ed25519 旧版可能不支持,推荐,安全性高rsa 分下面多种签名算法。(签名算法和密钥算法是两个概念)

ssh-rsa 由于签名中使用SHA-1算法,已经不被新版默认支持rsa-sha2-256、rsa-sha2-512 使用RSA密钥,但与更安全的SHA-2哈希算法结合使用,推荐

一般通过公钥的文件名或文件内容就能看出采用的密钥算法。

在使用ssh-keygen命令生成密钥对时,可以通过-t参数指定密钥算法:

ssh-keygen -t ed25519

上面分析中提到了两个配置PubkeyAcceptedAlgorithms和HostkeyAlgorithms,前者是用来验证客户端的,后者是用来验证服务端的。

客户端在通过ssh连接服务端时,首先要验证服务器身份,HostkeyAlgorithms就是用来指定验证服务器所使用的密钥算法的。一般服务器的/etc/ssh/目录下有一些文件名为ssh_host*的密钥对文件,就是用来提供服务器验证的。

服务器验证密钥对可以通过HostKey配置项指定grep 'HostKey' /etc/ssh/sshd_config:

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

HostKey /etc/ssh/ssh_host_ed25519_key

通过服务器验证后,服务器要验证客户端的身份,以便决定是否允许客户端密钥登录。这时采用什么密钥签名算法则是由PubkeyAcceptedAlgorithms配置决定的。

解决问题

既然ssh-rsa不够安全,那采用添加PubkeyAcceptedAlgorithms=ssh-rsa的方案就不被推荐了。

可以采用重新生成新旧版本都支持的密钥来解决上面的问题。

在两台服务器上重新生成密钥

ssh-keygen -t ecdsa

然后重新配置免密即可。

历史遗留或兼容性问题

若是基于某些原因服务器无法更换密钥,则需要在aws更改配置。

旧版ssh服务器到aws

更改aws服务器sshd的配置文件/etc/ssh/sshd_config:

PubkeyAcceptedAlgorithms=+ssh-rsa

符号+在这里的意思是“除了默认设置外额外添加”,这样不会覆盖默认的算法列表,而是将ssh-rsa添加到该列表中。

然后重启sshd服务。

aws到旧版ssh服务器

修改用户客户端配置文件~/.ssh/config:

Host 旧版ssh服务器地址

HostkeyAlgorithms +ssh-rsa

PubkeyAcceptedAlgorithms +ssh-rsa

若配置适用于所有的主机:

Host *

HostkeyAlgorithms +ssh-rsa

PubkeyAcceptedAlgorithms +ssh-rsa

OpenSSH开始在8.2版本中逐渐淘汰ssh-rsa,具体表现在对使用SHA-1哈希算法的ssh-rsa的支持上。这一变化主要是出于安全考虑,因为SHA-1已经被认为是不够安全的。 ↩︎

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: