查看linux 系统中 支持哪些 ssh negotiate 算法
在 Linux 系统中,要查看 SSH 服务端(sshd
)或客户端(ssh
)支持的密钥交换(Key Exchange,KEX)、加密算法、MAC 算法等协商参数,可以通过以下方法进行检测:
1. 查看 SSH 服务端(sshd)支持的算法
方法 1:通过 sshd -T
查看当前配置
sudo sshd -T | grep -E "kexalgorithms|ciphers|macs"
- 输出示例:
kexalgorithms curve25519-sha256,ecdh-sha2-nistp256 ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com macs umac-128-etm@openssh.com
- 说明:
这会显示当前sshd
配置中启用的算法列表(实际支持的算法可能更多)。
方法 2:通过 OpenSSL 检测(需 nmap
)
nmap --script ssh2-enum-algos <服务器IP>
- 输出示例:
| ssh2-enum-algos: | kex_algorithms: (9) | curve25519-sha256 | ecdh-sha2-nistp256 | encryption_algorithms: (6) | chacha20-poly1305@openssh.com | mac_algorithms: (10) | umac-128-etm@openssh.com
2. 查看 SSH 客户端(ssh)支持的算法
方法 1:通过 ssh -Q
查询
# 查看所有支持的密钥交换算法(KEX)
ssh -Q kex# 查看支持的加密算法
ssh -Q cipher# 查看支持的MAC算法
ssh -Q mac# 查看支持的签名算法(主机密钥类型)
ssh -Q sig
- 输出示例:
curve25519-sha256 ecdh-sha2-nistp256 diffie-hellman-group14-sha256
方法 2:通过 ssh -vvv
调试连接
ssh -vvv user@example.com
在输出的调试信息中搜索 kex: algorithm
、encryption:
等关键词,可以看到客户端和服务端协商的实际算法。
3. 查看 OpenSSH 的默认算法列表
OpenSSH 的默认算法优先级定义在源码中,也可以通过以下文件查看(路径可能因发行版不同):
# 查看服务端默认配置
cat /etc/ssh/sshd_config | grep -i kex# 查看客户端默认配置
cat /etc/ssh/ssh_config | grep -i kex
4. 手动测试特定算法是否支持
可以通过 -o
参数强制指定算法进行测试:
ssh -o KexAlgorithms=ecdh-sha2-nistp256 user@example.com
- 如果连接成功,说明服务端支持该算法;
- 如果报错
no matching key exchange method found
,则表示不支持。
关键算法类型说明
算法类型 | 作用 | 常见值示例 |
---|---|---|
kex | 密钥交换算法 | curve25519-sha256 , ecdh-sha2-nistp256 |
cipher | 加密算法 | aes256-gcm , chacha20-poly1305 |
mac | 完整性校验算法 | hmac-sha2-256 , umac-128 |
hostkey | 主机密钥类型 | ssh-ed25519 , ecdsa-sha2-nistp256 |
5. 升级/修改支持的算法
如果需要启用或禁用特定算法,可以编辑 /etc/ssh/sshd_config
:
# 示例:启用更强的KEX算法
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256# 禁用不安全的算法
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-256
修改后需重启服务:
sudo systemctl restart sshd
总结
- 服务端检测:
sshd -T
或nmap --script ssh2-enum-algos
- 客户端检测:
ssh -Q kex/cipher/mac
- 调试连接:
ssh -vvv
+ 分析日志 - 强制测试:
ssh -o KexAlgorithms=...
通过以上方法,可以全面掌握系统支持的 SSH 协商算法,并根据安全需求进行配置调整。