核心区别总结
特性 | sshd -t |
sshd -T |
---|---|---|
主要功能 | 语法检查 | 完整配置转储 |
输出内容 | 仅在有错误时输出错误信息;无错误则无输出。 | 显示所有生效的配置选项及其值(即使没有错误)。 |
详细程度 | 简洁 | 非常详细 |
退出代码 | 语法正确返回0,错误返回非0。 | 只要配置能被解析(即使有错误),通常返回0。 |
常用场景 | 修改配置文件后,重启服务前的快速安全检查。 | 深度调试,查看所有配置的实际值,或查找复杂问题。 |
详细解释
sshd -t
(测试模式)
- 作用 :这是一个纯粹的语法检查器 。它读取并解析SSH服务器的配置文件(
sshd_config
),检查其中是否有语法错误、无效的选项名称、缺少参数等。 - 行为 :
- 如果配置文件完全正确 ,它不产生任何输出,并安静地退出(返回码0)。这是你希望看到的结果。
- 如果配置文件有错误 ,它会将错误信息(如
Bad configuration option
)打印到 标准错误,并以非零状态退出。
- 为什么它至关重要 :在通过SSH远程管理服务器时,如果你修改了
sshd_config
然后重启服务,一个有语法错误的配置会导致sshd
服务启动失败 ,从而切断你的SSH连接 ,使你被锁在服务器外面。使用sshd -t
可以避免这种灾难性的情况。
示例:
bash
# 场景1:配置文件正确
$ sudo sshd -t
$ echo $?
0
# (没有任何输出,表示一切正常)
# 场景2:配置文件有拼写错误
$ sudo sshd -t
/etc/ssh/sshd_config: line 35: Bad configuration option: Porttt
/etc/ssh/sshd_config: terminating, 1 bad configuration options
$ echo $?
1
sshd -T
(调试/转储模式)
- 作用 :这个命令会解析配置文件并打印出所有当前生效的配置选项及其值。这包括了你在配置文件中明确设置的选项,以及所有你没有设置但使用了默认值的选项。
- 行为 :
- 它会将完整的配置列表输出到 标准输出。
- 即使配置文件中有一些不影响整体解析的警告,它也可能仍然执行并输出。
- 它的输出非常长,通常需要配合
grep
来查找特定的配置项。
- 用途 :
- 确认某个配置项的实际生效值是什么(因为默认值可能会被覆盖)。
- 在排查复杂的连接问题时(例如算法不匹配),查看服务器端实际支持哪些算法。
- 检查默认配置,了解服务器的完整设置。
示例:
bash
# 查看所有生效配置(输出很长)
$ sudo sshd -T
port 22
addressfamily any
listenaddress [::]:22
listenaddress 0.0.0.0:22
usepam yes
logingracetime 120
x11displayoffset 10
x11maxdisplays 1000
maxauthtries 6
maxsessions 10
clientaliveinterval 0
clientalivecountmax 3
streamlocalbindmask 0177
permitrootlogin yes
ignorerhosts yes
ignoreuserknownhosts no
hostbasedauthentication no
hostbasedusesnamefrompacketonly no
pubkeyauthentication yes
kerberosauthentication no
kerberosorlocalpasswd yes
kerberosticketcleanup yes
...
# 只查看与认证相关的配置
$ sudo sshd -T | grep -i authentication
# 查看服务器支持的密钥交换算法
$ sudo sshd -T | grep kexalgorithms
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
工作流程建议
在修改 /etc/ssh/sshd_config
文件后,建议遵循以下流程:
-
运行
sshd -t
bashsudo sshd -t
如果命令报错,不要重启服务,立即根据错误信息修复配置文件。
-
(可选)运行
sshd -T
bash# 确认你修改的配置项已按预期生效 sudo sshd -T | grep "你修改的配置项"
-
重启服务
bashsudo systemctl restart sshd
总结一句话:
-t
用于"安全重启",-T
用于"深度查看"。 在每次修改配置后,养成使用 sshd -t
的好习惯,可以有效防止因配置错误而失去远程访问权限。