服务器查看SSH端口号
SSH服务的默认端口号是22,但实际使用的端口需要通过检查服务器配置或网络监听状态来确定,以下是专业且权威的查看方法:
查看当前SSH服务监听的端口 (最直接可靠)
服务器上运行的SSH守护进程(sshd)会监听特定端口,使用以下命令查看其实际监听端口:
-
使用
ss命令 (推荐,现代高效)sudo ss -tlnp | grep sshd
-t: 显示 TCP 连接。-l: 仅显示监听(Listening)状态的套接字。-n: 以数字形式显示端口和地址(不解析主机名、服务名)。-p: 显示使用该套接字的进程信息。grep sshd: 过滤出与sshd进程相关的行。- 输出示例:
LISTEN 0 128 0.0.0.0:22026 0.0.0.0: users:(("sshd",pid=1234,fd=3)) LISTEN 0 128 [::]:22026 [::]: users:(("sshd",pid=1234,fd=4))关键信息:
0.0.0:22026和[::]:22026表示sshd正在监听所有IPv4和IPv6地址上的22026端口。
-
使用
netstat命令 (传统,广泛支持)sudo netstat -tlnp | grep sshd
-t: TCP 协议。-l: 监听状态。-n: 数字形式。-p: 显示进程信息。- 输出示例与解读:
tcp 0 0 0.0.0.0:22026 0.0.0.0: LISTEN 1234/sshd tcp6 0 0 :::22026 ::: LISTEN 1234/sshd关键信息:
0.0.0:22026和::22026同样表示监听在22026端口。
-
使用
lsof命令 (功能强大)sudo lsof -i -P -n | grep sshd | grep LISTEN
-i: 列出网络文件。-P: 禁止端口名转换(显示数字端口)。-n: 禁止主机名转换(显示IP地址)。grep sshd | grep LISTEN: 过滤出sshd进程且处于LISTEN状态的行。- 输出示例:
sshd 1234 root 3u IPv4 12345 0t0 TCP :22026 (LISTEN) sshd 1234 root 4u IPv6 12346 0t0 TCP :22026 (LISTEN)关键信息:`:22026
表示在所有地址上监听22026` 端口。
查看SSH服务器配置文件 (明确配置的端口)
SSH服务的端口号在配置文件 /etc/ssh/sshd_config 中定义。
- 使用文本编辑器(如
vi,nano)或命令查看:sudo grep -i '^port' /etc/ssh/sshd_config
- 结果解读:
- 如果输出类似
Port 22026,则明确配置的端口是22026。 - 如果输出类似
#Port 22(带注释符 ),则表示使用的是默认端口22。 - 如果该行完全不存在或被注释掉,使用的也是默认端口
22。 - 重要提示: 配置文件中定义的端口是
sshd计划 监听的端口,最终生效的端口必须与前面ss/netstat/lsof命令查看到的实际监听端口一致,如果修改了配置文件但未重启sshd服务 (sudo systemctl restart sshd),或者配置语法错误导致服务未加载新配置,实际监听的端口可能与配置文件不同。
- 如果输出类似
从客户端远程扫描端口 (外部视角验证)
在另一台机器上使用 nmap 扫描服务器的IP地址,探测哪些端口开放了SSH服务:
nmap -p 1-65535 -sV --script banner <服务器IP地址>
-p 1-65535: 扫描所有端口(范围可根据需要调整)。-sV: 进行版本探测,尝试识别服务。--script banner: 使用 banner 脚本获取服务标识信息,有助于识别SSH。- 结果解读: 在输出结果中查找状态为
open且服务识别为ssh的行,其对应的端口号即为服务器对外开放的SSH端口。此方法验证了外部网络可达性和防火墙规则设置是否允许该端口的连接。
关键注意事项与专业见解
- 权限要求: 使用
ss,netstat,lsof查看进程监听的端口通常需要root权限 (sudo)。 - 默认端口风险: 强烈建议不要使用默认的22端口,这是自动化扫描和攻击的首要目标,修改为高位端口(如 10000-65535)可显著减少噪音扫描和自动化攻击尝试。
- 防火墙配置: 修改SSH端口后,必须相应更新服务器防火墙(如
firewalld,ufw,iptables)规则,明确允许新端口的入站连接,并禁止旧端口(尤其是22端口)的访问,否则会导致SSH无法连接。 - 配置生效: 修改
/etc/ssh/sshd_config文件后,必须重启SSH服务 (sudo systemctl restart sshd) 才能使新端口生效,务必先确认新端口配置正确且防火墙已允许,并在重启前确保有备用的连接方式(如控制台)。 - 端口冲突: 选择新端口时,使用
ss -tuln或netstat -tuln检查该端口是否已被其他服务占用,避免冲突。 - SELinux/AppArmor: 如果服务器启用了SELinux (常见于RHEL/CentOS) 或 AppArmor (常见于Ubuntu/Debian),修改端口后可能需要更新策略以允许
sshd绑定到新端口,对于SELinux:sudo semanage port -a -t ssh_port_t -p tcp <新端口号> # 添加新端口 sudo systemctl restart sshd # 重启服务
- 多端口监听:
sshd_config支持配置多个Port行,如同时监听22和一个自定义端口,这在迁移过渡期有用,但长期应关闭22端口。
专业解决方案:安全加固最佳实践
- 第一步: 使用
ss -tlnp | grep sshd确认当前实际监听端口。 - 第二步: 编辑
/etc/ssh/sshd_config,添加或修改Port指令为自定义的高位端口 (Port 22026),注释掉或删除原有的Port 22行。 - 第三步: 更新防火墙规则:
firewalld:sudo firewall-cmd --permanent --remove-service=ssh; sudo firewall-cmd --permanent --add-port=<新端口号>/tcp; sudo firewall-cmd --reloadufw:sudo ufw allow <新端口号>/tcp; sudo ufw deny 22/tcp(确保应用规则sudo ufw reload或启用UFW)。
- 第四步 (SELinux系统): 执行
sudo semanage port -a -t ssh_port_t -p tcp <新端口号>。 - 第五步: 谨慎重启SSH服务:
sudo systemctl restart sshd。 - 第六步: 立即使用新端口测试连接 (如
ssh -p <新端口号> username@serverip)。 - 第七步: 确认成功后,再次扫描服务器22端口应已关闭,只有新端口响应SSH。
- 第八步 (可选但推荐): 结合密钥认证、禁用密码登录、使用Fail2ban等进一步增强SSH安全。
遇到SSH连接问题?欢迎分享您的场景:
- 您修改SSH端口后是否遇到过无法连接的情况?是如何解决的?
- 对于高安全环境,除了改端口,您认为最关键的SSH加固措施是什么?
- 是否存在必须保留22端口监听的情况?如何平衡安全与便利?
原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/30686.html
评论列表(3条)
这篇文章讲得挺实在的,作为一个爱钻牛角尖的边缘情况探索者,我觉得它抓到了关键点。SSH端口默认是22,但现实中端口被改的可不少,文章强调检查配置和监听状态是正路,这方法确实靠谱又权威。不过啊,我总爱琢磨极端场景:比如服务器被黑时,黑客改了端口还伪装监听,或者多个服务抢端口导致冲突,这时候光看配置文件可能不够,还得结合网络扫描工具才保险。还有,新手用户容易忽略端口22被禁的情况,直接操作可能翻车。文章说得简明,但实际中这些小概率事件往往最难搞,建议大家多备份配置,别光靠默认值。总体来说,实用性很强,值得收藏!
这篇文章讲得真棒!让我想起二战密码机配置,默认设置常被破解,检查实际端口才安全,历史教训啊。
这篇文章讲得挺清楚的,方法确实专业又实用,特别是直接查看SSH监听端口那招,对普通管理员来说很省事。不过作为边缘情况爱好者,我总爱琢磨那些奇葩场景。比如,如果服务器被安全加固了,SSH端口可能被改成随机值或隐藏起来,这时候你跑那些命令可能啥也查不出来,还得手动翻配置文件。再比如,网络环境复杂时,防火墙阻塞或容器端口映射错误,查询结果可能误导人,让你以为端口开着实际连不上。我在实际测试中就碰到过SSH服务崩溃的情况,监听命令直接报错,搞得一脸懵。总的来说,文章的核心方法很可靠,但极端条件下得多个心眼,检查服务状态和网络规则不能少,毕竟现实世界里总有意外等着呢!