按网上的教程配了SSH密钥、禁了密码登录,结果退出后连不上了——这种翻车事故每年都在重复上演。本文把SSH配置中的常见翻车点和恢复方法系统讲一遍。
翻车一:改了配置文件重启SSH后连不上
最经典的翻车:改了/etc/ssh/sshd_config、systemctl restart sshd、关掉当前SSH窗口——然后就再也连不上了。问题出在你退出之前没有验证新配置。
正确的操作顺序:改了配置后→先systemctl reload sshd(别restart,reload不断开现有连接)→新开一个终端窗口尝试用新配置登录→确认新窗口能连上→再关旧窗口。如果新窗口连不上,旧窗口还在,可以改回去。
reload和restart的区别:reload平滑重载配置不影响已建立的SSH连接,restart断掉所有连接。你当前正在用的就是这个连接——restart之后你就被踢出去了。
翻车二:密钥权限不对
SSH对密钥文件权限极其敏感——权限设错了直接拒绝使用。正确的权限:
# 服务端
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 客户端
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 # 私钥必须是600错误表现:SSH连接时提示”Permission denied (publickey)”但密钥明明放对了——大概率是authorized_keys或.ssh目录的权限不对。
翻车三:密钥格式不兼容
用ssh-keygen -t ed25519生成的新格式密钥在旧版SSH服务器上可能不识别。改成传统PEM格式:
ssh-keygen -p -m PEM -f ~/.ssh/id_ed25519服务端日志/var/log/auth.log里能看到具体的拒绝原因——tail -f /var/log/auth.log然后客户端尝试连接,实时看到日志输出。
翻车四:改端口后忘了开防火墙
改了SSH端口从22到别的端口,但UFW/iptables/云服务商安全组没放新端口。连不上时先确认:服务器上UFW有没有allow新端口、云服务商后台安全组有没有放行新端口的入站规则。
雨云VPS的防火墙在控制面板里设置,优惠码 admin01 首月五折。
翻车五:SELinux阻断SSH
CentOS/RHEL系统的SELinux可能阻止SSH使用非标准端口。改端口后需要更新SELinux策略:
semanage port -a -t ssh_port_t -p tcp 新端口号
# 如果semanage没装:yum install policycoreutils-python-utils被锁外面了的恢复方法
如果已经被锁外面了:VPS控制台VNC登录(大部分服务商都支持,不依赖SSH)→登录后修改配置→systemctl reload sshd→如果连VNC都进不去(系统启动卡住)→用救援模式挂载系统盘改配置→或者如果有快照就回滚。
预防翻车的最好方案:改SSH配置的同时保持一个已连接的窗口打开不关,直到确认新配置能正常工作。
常见问题
密钥登录配好了为什么还是提示输入密码?
PasswordAuthentication还没设为no——SSH会先尝试密钥、失败后回退到密码登录。这不是密钥配置失败,是密码认证还开着做兜底。确认密钥登录正常后再关密码认证。
可以用同一个密钥登录多台VPS吗?
可以而且常见做法——一个私钥对应对个服务器的authorized_keys里放同一个公钥。但如果私钥泄露,所有用这个密钥的服务器都面临风险。生产环境建议不同服务器用不同密钥。
authorized_keys文件里可以放多个公钥吗?
可以——一行一个公钥。多个管理员各用自己的密钥登录同一个账号,或者一台VPS允许从多台客户端登录。






