如何强制SSH使用指定算法进行主机身份认证及默认选择规则
问题1:是否可以强制SSH使用指定主机认证算法?
可以直接指定算法,不需要手动修改known_hosts文件,有两种生效方式:
- 临时单次生效:连接时追加
-o HostKeyAlgorithms参数即可,比如强制使用ecdsa算法连接的命令为:ssh -o HostKeyAlgorithms=ecdsa-sha2-nistp256 用户名@服务器地址 - 永久生效:编辑本地
~/.ssh/config文件,按需求配置即可:
针对单台服务器指定算法示例:
要是需要全局所有连接都用指定算法,就配置通用规则:Host 你的服务器别名(比如centos-8) HostName 服务器实际IP/域名 User 登录用户名 HostKeyAlgorithms ecdsa-sha2-nistp256Host * HostKeyAlgorithms ecdsa-sha2-nistp256,ssh-rsa
配置完成后SSH会自动按你指定的算法优先级协商、校验服务器公钥,匹配的公钥条目会自动写入known_hosts,无需手动修改文件。如果之前已经存储过其他算法的公钥条目,第一次切换算法连接时会提示主机公钥变更告警,确认是正常操作即可继续连接。
问题2:SSH默认如何选择主机身份认证算法?
SSH连接握手阶段,客户端和服务端会分别发送自身支持的主机密钥算法优先级列表,最终选择两端同时支持、且优先级最高的算法使用。
不同OpenSSH版本的默认优先级略有差异,目前主流版本的默认优先级从高到低大致为:ed25519系列算法 > ECDSA系列算法 > RSA系列算法,DSA算法在OpenSSH 7.0之后已经默认被禁用。
你本地known_hosts同时存在RSA和ECDSA两种条目,一般是因为不同时间连接时,客户端/服务端的算法优先级配置有变动,两次协商选出的算法不同,就分别存储了对应算法的公钥条目。
内容的提问来源于stack exchange,提问作者irritable_phd_syndrome
相关产品推荐
相关产品推荐

