在服务器运维与安全管理中,查看SSH端口是一项基础且关键的操作。核心上文归纳是:查看服务器SSH端口主要有两种最准确的方法,一是通过读取SSH服务的主配置文件获取静态设置值,二是通过网络监听命令查看当前系统实际运行的动态端口状态。 结合防火墙规则和端口扫描工具进行验证,可以确保端口信息的准确性和连通性,以下将从配置文件查询、运行状态监听、防火墙验证及故障排查四个维度详细展开。

查看SSH服务主配置文件
SSH服务的运行参数主要由配置文件sshd_config控制,这是查看SSH端口最直接、最权威的方法,在绝大多数Linux发行版(如CentOS、Ubuntu、Debian)中,该文件的默认路径位于/etc/ssh/sshd_config。
要查看配置文件中定义的端口,可以使用grep命令进行过滤,以快速定位关键信息,在终端中执行以下命令:
grep -i "port" /etc/ssh/sshd_config
执行该命令后,通常会出现以下几种情况:
- 显示
Port 22:这表示SSH服务正在使用默认的22端口。 - 显示
#Port 22:注意行首有一个符号,这表示该行被注释掉了,在这种情况下,SSH服务实际上并不会读取该行设置,而是默认使用22端口。 - 显示
Port 2222或其他数字:这表示管理员已经修改了默认端口,当前SSH服务配置为监听该指定端口。
需要注意的是,配置文件中的端口是“静态”的,如果修改了配置文件但未重启SSH服务,或者配置文件存在语法错误导致服务加载了备用配置,那么文件中的数值可能与实际运行情况不符,读取配置文件后,必须结合下一步的运行状态检查来确认。
检查系统实际监听端口
为了确认SSH服务当前真正监听的端口,需要使用网络状态查询命令,这是验证端口是否生效的“金标准”,现代Linux系统推荐使用ss命令,它是netstat的替代品,速度更快且输出更详细。
可以使用以下命令查看所有监听(Listening)状态的TCP端口:
ss -tlnp | grep sshd
或者使用更传统的netstat命令(在某些旧版本系统中默认未安装,需安装net-tools包):
netstat -tlnp | grep sshd
命令参数解析:

-t:显示TCP协议的连接。-l:仅显示监听状态的套接字。-n:以数字形式显示端口号和IP地址,不进行DNS解析,提高显示速度。-p:显示监听该端口的进程名称和PID(Process ID)。
输出结果解读:
在输出结果中,重点关注Local Address列,若显示0.0.0:22或::22,则表示SSH服务正在监听22号端口,且允许从任何IPv4或IPv6地址连接,如果显示的是0.0.0:2222,则说明实际运行端口为2222,通过-p参数,你还能确认确实是sshd进程占用了该端口,从而避免与其他服务(如Web服务的80端口)混淆。
验证防火墙与安全组设置
确认了服务配置和系统监听状态后,还需要检查网络层面的防火墙规则,很多时候,SSH服务运行正常,端口监听也正确,但由于防火墙拦截,导致无法连接。
对于本地防火墙:
- CentOS 7/RHEL 7及以上(使用firewalld):执行
firewall-cmd --list-ports,查看允许通过的端口列表中是否包含你的SSH端口。 - Ubuntu/Debian(使用UFW):执行
sudo ufw status,检查SSH端口对应的规则状态是否为ALLOW。 - 旧版系统(使用iptables):执行
iptables -L -n -v,查看INPUT链中是否有针对SSH端口的ACCEPT规则。
对于云服务器:
如果服务器部署在阿里云、腾讯云、AWS等云平台上,除了本地防火墙,还必须检查安全组设置,安全组通常作用于虚拟化层,优先级高于本地防火墙,登录云控制台,找到该实例的安全组规则,确保入方向规则中开放了对应的SSH端口(无论是22还是自定义端口),且授权对象包含你的客户端IP地址。
使用端口扫描工具进行远程测试
为了从外部视角验证SSH端口是否真正可达,可以使用nmap或telnet工具,这一步在排查网络连通性问题时尤为重要。
使用nmap扫描服务器IP的指定端口:
nmap -p 22 <服务器IP地址>
如果输出显示22/tcp open ssh,说明端口是开放的且SSH服务正在运行,如果显示filtered或closed,则分别表示防火墙拦截或服务未监听。
如果没有安装nmap,可以使用系统自带的telnet进行简单探测:

telnet <服务器IP地址> 22
如果屏幕显示Connected to...或Escape character is...,说明网络连通正常,如果显示Connection refused或Connection timed out,则分别对应服务未启动或防火墙拦截。
常见问题与专业解决方案
在实际操作中,可能会遇到配置文件显示的端口与监听端口不一致的情况,这通常是因为修改了配置文件但忘记重启SSH服务,解决方法很简单,执行systemctl restart sshd(CentOS/RHEL)或service ssh restart(Ubuntu/Debian)即可使配置生效。
另一个常见问题是SELinux阻止了非标准端口,在CentOS等开启了SELinux的系统中,即使修改了配置文件并重启了服务,如果将端口改为非22(例如2222),SELinux可能会默认阻止该端口用于SSH,专业的解决方案是使用semanage命令将新端口添加到SSH上下文中:
semanage port -a -t ssh_port_t -p tcp 2222
这一步经常被初级运维人员忽视,导致明明配置正确却无法连接。
相关问答
Q1:如果忘记了SSH端口号且无法通过SSH登录,还有其他办法查看吗?
A: 如果无法通过SSH登录,可以尝试通过云服务商的控制台提供的“VNC连接”或“远程控制台”功能直接登录服务器图形界面或字符界面,登录后,按照文中提到的ss -tlnp | grep sshd或查看/etc/ssh/sshd_config文件即可找回端口号,如果是物理服务器,则需要连接显示器和键盘在本地终端查看。
Q2:为什么修改SSH端口后,使用netstat看不到新端口?
A: 这通常有两个原因,第一是修改了/etc/ssh/sshd_config文件后,没有执行重启命令(如systemctl restart sshd),服务仍在使用旧配置运行;第二是配置文件语法错误,导致服务启动失败,建议先检查配置文件语法是否正确,然后重启服务,并查看服务状态systemctl status sshd确认服务是否正常运行。
通过以上步骤,你可以从配置、运行状态、防火墙策略及外部连通性四个层面全方位掌握服务器SSH端口的查看与验证方法,如果你在操作过程中遇到任何特殊情况或报错信息,欢迎在评论区留言,我们将共同探讨解决方案。


















