我以前改 SSH 端口时总觉得“肯定记得住”,结果客户端里只保存了 22,过一段时间再登录,私钥明明还在,服务器也没坏,就是怎么都连不上。遇到这种情况,我不会第一时间重装 VPS:只要 IP、私钥或 root 密码还在,通常都能把端口找回来。
先用 Nmap 找开放端口
如果 SSH 服务仍在运行,最省事的办法是在自己的电脑上扫描这台 VPS:
nmap -Pn -p- --open -T4 VPS_IP
这里的 -Pn 是不依赖 ping 判断主机状态,-p- 扫描 TCP 的 1 到 65535 端口,--open 只显示开放端口,-T4 则让扫描速度更快。扫出来的结果里,除了网页服务端口,还可以重点留意高位、状态为 open、服务显示为 unknown 的端口。
比如发现 38652/tcp open unknown,可以再单独确认:
nmap -Pn -p 38652 -sV VPS_IP
如果识别为 OpenSSH,就用原来的私钥连接:
ssh -i 私钥文件路径 -p 38652 root@VPS_IP
这里要注意,扫描自己的 VPS 没问题,但不要拿这套方法去扫无关主机。若结果大量显示 filtered,或者根本找不到 SSH,就别继续和 Nmap 较劲了。
Nmap 找不到,就进 KiwiVM
搬瓦工的 KiwiVM 网页控制台不依赖 SSH 端口。进入对应 VPS 后打开网页控制台,找到 Root Shell Interactive 一类的入口,用 root 和系统密码登录,然后执行:
sshd -T | grep '^port '
它显示的是当前真正生效的 SSH 配置,比只翻 /etc/ssh/sshd_config 更可靠,因为其他配置文件可能覆盖主文件。还可以执行 ss -lntp | grep sshd,确认 sshd 是否确实监听在这个端口。
如果忘了 root 密码,可以先在 KiwiVM 面板重设。要记住,重设密码不会自动开启 SSH 密码登录;如果 PasswordAuthentication 仍是 no,外部 SSH 依旧要使用私钥。VNC 和 SSH 是两套登录方式,私钥不能直接拿来登录网页控制台。
找回端口后,记得同步检查防火墙是否放行新端口。以后我会把端口、IP 和密钥位置一起保存,省得下次再和自己的 VPS 玩“猜猜我在哪”。
以前也改过端口,结果连不上急死人
Nmap 扫描全端口确实是最直接的办法
KiwiVM 控制台这个功能很实用,救急必备
高位端口容易被防火墙拦截,要注意检查
私钥还在但连不上,这种尴尬谁懂啊
命令里的 -T4 参数能加快速度吗?
记得扫完要确认防火墙规则,不然白忙活
用网页控制台重置密码后还要配密钥吗
这种排查思路比重装系统省事多了
之前就是忘了端口,折腾半天才连上
不知道有没有更简单的自动检测脚本
下次改端口前先备份配置信息吧