如何列出我ssh服务器支持的MAC、Ciphers和KexAlogrithms?

如何确定我的SSH服务器支持的MAC、密码、密钥长度和KexAlogrithms? 我需要为外部安全审计创建一个列表。我正在寻找类似于openssl s_client -connect example.com:443 -showcerts的解决方案。根据我的研究,ssh使用的是在man sshd_config中列出的默认密码。然而,我需要一个可以在脚本中使用的解决方案,因为man sshd_config没有列出有关密钥长度的信息。我需要更正一下:您可以在sshd_config中指定ServerKeyBits。 我猜ssh -vv localhost &> ssh_connection_specs.out会返回我所需的信息,但我不确定列出的密码是客户端还是服务器支持的密码。而且我不知道如何在脚本中以非交互方式运行它。 是否有一种方便的方法来获取SSH连接信息?

3事实证明,正如@Jakuje所建议的那样,sshd -T | grep "\(ciphers\|macs\|kexalgorithms\)"只适用于RHEL7主机,而不适用于RHEL6。最后我使用了nmap --script SSH2-hostkey localhostnmap --script ssh-hostkey localhost - Henrik Pingel
ssh -vv 输出的是客户端到服务器(ctos)和服务器到客户端(stoc)之间支持的功能。然而,这些输出似乎受限于双方的支持,使它们在安全审计中的实用性减弱。 - Moshe
@Moshe: 这是不正确的;-v (debug1) 只显示已经同意/选择的值,但是 -vv (debug2) 也会分别显示客户端和服务器的提议。顺便说一下:openssl s_client 并不能完全显示服务器支持的所有内容,只能显示服务器基于给定客户端选择的单个套件(以及1.3版本的密钥交换/身份验证)。SSL/TLS协议并不向客户端提供这些信息,但SSH协议可以。 - dave_thompson_085
2个回答

如何确定我的SSH服务器支持的MAC、密码、密钥长度和KexAlogrithms?看起来https://superuser.com/a/1219759/173408上的答案也是对你问题的回答。它可以用一句话概括:
nmap --script ssh2-enum-algos -sV -p 22 1.2.3.4
这是在一台纯净的Debian 9.4机器上,使用最新的SSH版本的输出结果: 开始Nmap 7.01(https://nmap.org)于2018-05-22 13:40 CEST Nmap扫描报告1.2.3.4 主机正常运行(0.00024秒延迟)。 端口 状态 服务 版本 22/tcp 开放 ssh OpenSSH 7.4p1 Debian 10+deb9u3(协议2.0) | ssh2-enum-algos: | kex_algorithms:(10) | curve25519-sha256 | curve25519-sha256@libssh.org | ecdh-sha2-nistp256 | ecdh-sha2-nistp384 | ecdh-sha2-nistp521 | diffie-hellman-group-exchange-sha256 | diffie-hellman-group16-sha512 | diffie-hellman-group18-sha512 | diffie-hellman-group14-sha256 | diffie-hellman-group14-sha1 | server_host_key_algorithms:(5) | ssh-rsa | rsa-sha2-512 | rsa-sha2-256 | ecdsa-sha2-nistp256 | ssh-ed25519 | encryption_algorithms:(6) | chacha20-poly1305@openssh.com | aes128-ctr | aes192-ctr | aes256-ctr | aes128-gcm@openssh.com | aes256-gcm@openssh.com | mac_algorithms:(10) | umac-64-etm@openssh.com | umac-128-etm@openssh.com | hmac-sha2-256-etm@openssh.com | hmac-sha2-512-etm@openssh.com | hmac-sha1-etm@openssh.com | umac-64@openssh.com | umac-128@openssh.com | hmac-sha2-256 | hmac-sha2-512 | hmac-sha1 | compression_algorithms:(2) | none |_ zlib@openssh.com 服务信息:操作系统:Linux;CPE:cpe:/o:linux:linux_kernel 已执行服务检测。请在https://nmap.org/submit/报告任何不正确的结果。 Nmap完成:扫描了1个IP地址(1个主机正常运行),用时0.52秒

1我用这个命令得到了一个PORT STATE SERVICE VERSION 22/tcp filtered ssh的结果,尽管我可以通过ssh登录到同一台服务器。 - hey
你是字面上使用了命令,还是将 1.2.3.4 替换为你服务器的 IP 地址? - Stéphane Gourichon
我使用了我的服务器的IP。 - hey

你在问题中漏掉了几个要点: - 你的openssh版本是多少?不同版本可能会有些许差异。 - `ServerKeyBits` 是协议版本1的选项,希望你已经禁用了它! 支持的密码、消息认证码和密钥交换算法在手册中始终可用,与密钥长度无关。 启用的密码、消息认证码和密钥交换算法是通过连接提供的那些。但它们也可以通过其他方式获得,例如使用 `sshd -T | grep "\(ciphers\|macs\|kexalgorithms\)"` 命令。 要获取服务器密钥的长度,你可以使用 ssh-keygen 命令:`ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub`。 但你可能还想知道在密钥交换期间提供和使用的模数大小,这取决于密钥交换方法,但可以从调试输出 `ssh -vvv host` 中读取。

2谢谢。结果证明 sshd -T | grep "\(ciphers\|macs\|kexalgorithms\)" 只适用于我的 RHEL7 主机,而不适用于 RHEL6。我最后使用了 nmap --script SSH2-hostkey localhostnmap --script ssh-hostkey localhost - Henrik Pingel
1RHEL6主机安装最新的openssh更新后,问题应该得到解决。 - Jakuje
你说得对。我只是在一个过时的虚拟机上检查了一下...谢谢。 - Henrik Pingel
sshd -T 只会提供关于在 sshd_config 文件中配置的密码算法的信息,而不是实际可以添加到其中并由二进制文件支持的内容。 - Daniel J.