问题背景
在对 Linux 服务器执行 OpenSSH 升级(如通过 apt upgrade openssh-server 或源码编译安装)后,部分用户发现 SSH 客户端无法再连接服务器,出现“Connection refused”、“Permission denied (publickey)”等错误。
这通常不是升级本身的问题,而是配置变更、权限重置或安全策略更新所致。本文将帮助你快速定位并解决问题。
常见原因与解决方案
1. SSH 服务未启动或监听端口变化
升级后 sshd 可能未自动启动,或配置文件中 Port 被修改。
sudo systemctl status sshd # 检查服务状态 sudo systemctl start sshd # 启动服务 sudo ss -tuln | grep :22 # 确认是否监听 22 端口
2. 配置文件语法错误
新版本 OpenSSH 对配置更严格,旧配置可能不兼容。
sudo sshd -t # 测试配置文件语法 sudo journalctl -u sshd # 查看启动日志
注意:如果使用了
PermitRootLogin without-password,新版本可能要求改为 PermitRootLogin prohibit-password。
3. 用户家目录或密钥文件权限过宽
OpenSSH 要求严格的权限控制,否则拒绝公钥认证。
# 正确权限示例(以 root 为例) chmod 700 /root chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys chown -R root:root /root/.ssh
4. SELinux 或 AppArmor 干扰
安全模块可能阻止新版本 sshd 访问密钥文件。
# 临时禁用 SELinux 测试 sudo setenforce 0 # 若恢复正常,需调整策略: sudo restorecon -R /root/.ssh
5. 密钥算法被弃用
新版 OpenSSH 默认禁用不安全算法(如 ssh-rsa SHA-1)。
客户端可显式启用旧算法(仅测试环境):
ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa user@host
建议生成新的 Ed25519 密钥:
ssh-keygen -t ed25519 -C "your_email@example.com"
应急恢复建议
- 保留控制台访问权限(如云平台 VNC、IPMI),避免完全失联。
- 升级前备份
/etc/ssh/sshd_config和/etc/ssh/*_key文件。 - 在测试机验证升级流程后再操作生产环境。