当 SSH 端口、密码认证或公钥认证出现异常时,直接翻阅配置文件并不一定能得到答案。sshd -T 的核心作用,是让 SSH 服务以测试模式解析配置,并输出当前实际生效的参数。它会合并主配置文件以及通过 Include 加载的其他配置,因此比只查看某一个配置文件更适合用于故障排查。
查询当前 SSH 端口
通过控制台进入服务器后,可以执行:
sshd -T | grep '^port '
如果输出:
port 38652
就表示当前生效的 SSH 端口是 38652。这里显示的是 sshd 解析后的有效值,而不只是某个文件里写过的值。若系统存在额外配置目录或 Drop-in 配置,后加载的内容可能覆盖主配置文件中的设置;这也是“文件里看见一个端口,实际却监听另一个端口”的常见原因。
确认配置值后,还可以检查 sshd 是否真的在监听该端口:
ss -lntp | grep sshd
如果结果中出现类似 0.0.0.0:38652 的监听记录,说明服务已经绑定该端口。若 sshd -T 显示了端口,但监听状态中没有对应记录,就不能只修改客户端连接参数,还应继续检查 SSH 服务是否运行以及配置是否能正常加载。
查询其他生效配置
sshd -T 不只适合查端口,也适合核对认证策略。例如:
sshd -T | grep '^passwordauthentication '
如果返回 passwordauthentication no,表示 SSH 不接受密码认证;这不会删除系统的 root 密码,也不会影响通过 KiwiVM 或 VNC 控制台使用 root 密码登录。SSH 私钥同样只用于 SSH,不能替代控制台登录凭据。
因此,排查 SSH 连接问题时,应先用 sshd -T 确认端口和认证策略,再结合监听状态、防火墙规则与客户端参数逐项核对。它的价值不在于读取配置文本,而在于回答“sshd 当前究竟采用了什么配置”。
这个命令查实际生效值,确实省时间
Include 配置容易漏看,这点很实用
端口查到后还得配合监听状态确认
原来配置文件里的值不一定就是最终值
密码认证关闭后,控制台登录不受影响
排查 SSH 问题时先看有效配置比较稳
想问下 Drop-in 配置通常放在哪些目录
只改客户端端口,服务没监听也连不上
公钥和控制台密码的区别讲得挺清楚
这个命令也适合检查登录策略是否生效