SSH port switching
本文以 Ubuntu 的 OpenSSH 服务为例,记录自己拥有或获授权管理的服务器的 SSH 连接排查与端口配置。
以下命令中的 admin 是示例用户名,192.0.2.10 是文档专用示例 IP,22222 是示例端口;使用时替换成自己的实际配置。
检查 SSH 服务
如果无法通过 SSH 登录,可通过云服务商提供的控制台或远程终端检查服务器。
检查配置与实际监听端口
sudo sshd -t
sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication|pubkeyauthentication) '
sudo ss -lntp
sudo systemctl status ssh.service ssh.socket --no-pager
sshd -t检查配置语法,成功时通常没有输出。sshd -T显示解析后的配置,比只查找主配置文件中的Port更可靠;针对特定用户或地址的Match规则还需要单独核实。ss -lntp检查实际监听地址、端口和进程。使用 socket 激活时,监听者可能是 systemd。ssh.service和ssh.socket用于查看服务状态;具体启用哪一个取决于系统配置。
登录权限
建议使用普通管理账号配合 sudo,优先使用 SSH 密钥认证。PermitRootLogin yes 不是 SSH 正常运行的必要条件,不应把开启 root 直接登录当作通用修复方法。
调整 root 登录或密码认证策略前,先确认普通账号、密钥和 sudo 可用,并在另一个终端验证登录,避免失去管理入口。
SSH 连接故障排查
在本地 Windows PowerShell 中测试实际 SSH 端口:
Test-NetConnection -ComputerName 192.0.2.10 -Port 22
查看 TcpTestSucceeded。失败时,依次检查服务器是否运行、地址与端口是否正确、云安全组、系统防火墙以及 SSH 服务监听状态。
Ping 测试的是 ICMP 可达性。Ping 不通可能是 ICMP 被禁用、设备未响应或网络故障;Ping 通也不能说明 SSH 端口可用。仅凭 Ping 结果不能判断 IP 或端口是否被封锁。
如果 TCP 端口可达但登录失败,可以使用 SSH 的详细日志排查账号、密钥或认证配置:
ssh -v -p 22 admin@192.0.2.10
分享日志前应去除真实地址、用户名和本地路径等不必要的信息。
更改 SSH 端口
更改端口可减少针对默认端口的自动扫描,但不能替代密钥认证、系统更新和访问控制。
-
保留当前 SSH 会话,确认云控制台可用,并备份准备修改的配置文件。
-
在云安全组与系统防火墙中放行新端口。若服务器使用已启用的 UFW,可运行:
sudo ufw allow 22222/tcp -
检查
/etc/ssh/sshd_config及其Include引入的配置,把实际生效的Port设置为新端口。此处以22222为例,不要仅替换可能不存在的#Port 22。有意监听多个端口时,需要核对所有Port配置。 -
检查配置语法:
sudo sshd -t -
检查
ssh.socket是否启用:systemctl is-active ssh.socketUbuntu 24.04 使用 socket 激活时,需要重新生成并加载监听配置,再重启相关单元:
sudo systemctl daemon-reload sudo systemctl restart ssh.socket sudo systemctl restart ssh.service如果使用直接监听端口的
ssh.service,重新加载服务配置:sudo systemctl reload ssh.service自定义的 socket 监听配置可能覆盖端口设置,应检查
systemctl cat ssh.socket的输出,并以实际监听结果为准。 -
使用
sudo ss -lntp确认新端口正在监听,再从另一个本地终端尝试连接:ssh -p 22222 admin@192.0.2.10 -
新连接成功后,再按需要移除旧端口的监听配置和放行规则,然后关闭原会话。如果失败,通过保留的会话或云控制台恢复配置。