当 SSH 服务(sshd
)启动失败时,通常与配置错误、权限问题或端口冲突有关。以下是逐步排查和解决方案:
1. 查看详细错误日志
使用 journalctl
检查服务日志:
sudo journalctl -xeu sshd.service
• 重点关注红色错误信息(如配置语法错误、权限被拒绝等)。
2. 检查 SSH 配置文件
验证 /etc/ssh/sshd_config
的语法:
sudo sshd -t
• 输出无错误:显示 Syntax OK
。
• 输出有错误:按提示修复配置文件中的语法问题(如未闭合的引号、无效参数)。
3. 常见问题及修复
问题 1:端口被占用
• 检查端口占用:
sudo ss -tulnp | grep ':22\b'
• 如果 22 端口被其他进程占用,修改 sshd_config
中的 Port
为其他值(如 Port 2222
)。
问题 2:SELinux 阻止启动
• 临时禁用 SELinux(测试用):
sudo setenforce 0
• 如果服务启动成功,需调整 SELinux 规则:
bash sudo ausearch -c 'sshd' --raw | audit2allow -M my-sshd sudo semodule -i my-sshd.pp
问题 3:权限错误
• 检查关键目录权限:
sudo chmod 755 /etc/ssh
sudo chmod 600 /etc/ssh/ssh_host_*_key
sudo chown root:root /var/empty/sshd
问题 4:缺少主机密钥
• 重新生成密钥:
sudo ssh-keygen -A
sudo systemctl restart sshd
4. 其他排查步骤
检查防火墙:
sudo firewall-cmd --list-all
• 确保 SSH 端口(如 22/tcp)在防火墙规则中开放。
手动启动调试模式:
sudo /usr/sbin/sshd -d
• 在终端实时观察调试输出,定位具体错误。
5. 恢复默认配置(可选)
如果问题由配置更改引起,可恢复备份配置:
sudo cp /etc/ssh/sshd_config.rpmnew /etc/ssh/sshd_config # 从 RPM 备份恢复
sudo systemctl restart sshd
总结
通过以上步骤,通常可解决 90% 的 sshd.service
启动失败问题。若仍无法解决,请提供 journalctl
的关键错误片段,以便进一步分析。
根据日志显示,问题出在 SSH 配置文件 /etc/ssh/sshd_config
中使用了无效的配置项 GSSAPIKexAlgorithms
。以下是修复步骤:
1. 定位并修正配置错误
检查配置文件第 157 行的错误:
sudo vi /etc/ssh/sshd_config
• 找到第 157 行(或搜索 GSSAPIKexAlgorithms
):
:157 # 快速跳转到第 行
/GSSAPIKexAlgorithms # 搜索关键词
• 修正或注释该行:
#GSSAPIKexAlgorithms yes # 直接注释或删除此行
2. 验证配置语法
使用 sshd -t
测试配置:
• 如果输出 Syntax OK
:配置已修复。
• 如果仍有错误:根据提示修正其他配置问题。
3. 重启 SSH 服务
sudo systemctl restart sshd
sudo systemctl status sshd # 检查状态
4. 补充说明
为什么会出现 GSSAPIKexAlgorithms
错误?
• 错误原因:GSSAPIKexAlgorithms
是无效的 SSH 配置选项,可能是以下情况导致:
- 手动编辑配置文件时笔误。
- 从旧版本迁移配置到新版本 OpenSSH 时兼容性问题。
- 第三方工具或脚本错误注入的配置。
正确的 GSSAPI 相关配置项
如果需要启用 GSSAPI 认证(如 Kerberos),应使用以下合法选项:
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
5. 其他可能的问题
PAM 模块警告(pam_tally2.so
)
日志中出现的以下警告:
PAM unable to dlopen(/usr/lib64/security/pam_tally2.so): No such file or directory
• 原因:pam_tally2
模块在较新系统中已被 pam_faillock
替代。
• 解决方案:
• 如果不需要登录失败计数功能,忽略此警告。
• 如果需要修复,安装 pam
包或更新 PAM 配置:
bash sudo yum reinstall pam
6. 最终验证
• 检查 SSH 服务状态:
systemctl status sshd
• 测试 SSH 连接:
ssh localhost
总结
通过修正无效配置项 GSSAPIKexAlgorithms
,SSH 服务应能正常启动。如果问题持续,请提供 sshd -t
的输出或更新后的日志片段。