在日常运维中,SSH指定端口登录服务器是最常见的操作之一。很多服务器出于安全考虑,会把默认的 22 端口改成自定义端口,如果仍按默认方式登录,就会出现连接被拒绝或超时的提示。
本文按实际操作顺序,介绍命令行指定端口、修改默认端口、放行并验证登录三个环节,帮助你快速完成配置。
Windows 10 及以上版本、macOS 和 Linux 都自带 OpenSSH 客户端,打开终端即可使用。在使用SSH远程连接服务器时,只需通过 -p 参数写明端口号,基本格式如下:
ssh -p 端口 root@服务器IP
其中 端口是服务器实际监听的端口,root 是登录用户名。首次登录会提示确认主机指纹,输入 yes 后再输入密码即可。注意这里的 -p 必须小写。
如果使用密钥登录,可以再加上 -i 参数指定私钥文件:
ssh -i ~/.ssh/id_rsa -p 22 root@服务器IP传输文件时,scp 和 sftp 指定端口的参数是大写的 -P,与 ssh 命令正好相反,很容易写错:
scp -P 22 ./file.zip root@服务器IP:/root/22 是公开的默认端口,服务器上线后常被脚本持续扫描和暴力破解。端口改动只影响SSH连接的入口,不能代替强密码或密钥认证,但可以减少被批量扫描的概率。下面以 2222 端口为例,端口建议选择 1024 到 65535 之间未被占用的数字。
第一步,编辑服务器上的 sshd 配置文件:
vi /etc/ssh/sshd_config找到 #Port 22 这一行,按i进入编辑模式,去掉前面的 #,并在下方新增一行 Port 2222(示例端口,可自定义)。确认新端口可用之前,不要删除 22,让两个端口同时生效,以防配置有误导致无法登录:

Esc 键退出编辑模式,然后输入 :wq回车保存并退出编辑器。保存后重启服务。CentOS、Rocky 的服务名为 sshd,Ubuntu、Debian 的服务名为 ssh:
systemctl restart sshd新版 Ubuntu(如 24.04)默认由 ssh.socket 负责监听,如果新端口没有生效,可再执行 systemctl daemon-reload 和 systemctl restart ssh.socket。随后检查端口是否已经处于监听状态:
ss -tlnp | grep sshd
放行新端口并验证登录
服务监听新端口后,还需要让防火墙允许流量通过。VMRack 的 VPS 支持 CentOS、Rocky、Ubuntu、Debian 等主流系统,不同系统的防火墙工具不同。Ubuntu、Debian 常用 ufw:
ufw allow 2222/tcpCentOS、Rocky 常用 firewalld:
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload服务商若另外提供网络层防火墙或安全组,也要同步放行 TCP 2222,否则外部依然无法访问。放行完成后不要关闭当前窗口,另开一个终端测试新端口能否登录:
ssh -p 2222 root@服务器IP登录成功后,再回到 sshd_config 删除或#注释 Port 22 一行,重启服务,并移除防火墙中 22 端口的放行规则,旧端口即被彻底关闭。如果测试失败,原来的会话仍可用来回头检查配置。
掌握SSH指定端口的方法并不复杂,客户端使用 -p 参数指定端口,服务器端修改 sshd_config、放行防火墙,先测试新端口再关闭 22 端口,即可安全完成端口调整。