首页 > Sysadmin > 正文

Linux 查看 SSH 端口:5 条命令定位监听地址

huyuanwen 2026-11-03 Sysadmin

SSH 端口决定了远程登录入口是否正确暴露、防火墙规则是否放行,以及服务配置与运行状态是否一致。

ss:直接查看监听端口

ss -tlnp 列出所有 TCP 监听端口及对应进程,加上 grep sshd 只过滤 SSH 相关行 [1]。-t 表示 TCP,-l 表示监听状态,-n 直接显示数字端口,-p 显示进程名。

ss -tlnp | grep sshd

如果 sshd 正在监听 22 端口,输出中会出现 :22 或 LISTEN 状态。结合 | head 可以防止无关进程干扰。

grep:读取 sshd_config 配置端口

sshd 的实际端口由 /etc/ssh/sshd_config 中的 Port 指令决定,查看配置可以知道服务被要求监听哪个端口 [3]。注释行和空行不影响解析,直接取第一个 Port 值。

grep ^Port /etc/ssh/sshd_config

配置文件中的端口与服务实际监听端口可能不一致,需要配合 ss 结果交叉确认。

systemctl:确认 sshd 运行状态

systemctl status sshd 可以确认服务是否在运行,以及当前活动配置的摘要信息 [2]。如果服务未运行,即使配置文件存在端口也无法对外监听。

systemctl status sshd | head -20

输出中的 Active: active (running) 表示服务已启动,随后会显示主进程 ID 和监听地址。

iptables:检查防火墙是否放行

SSH 端口在服务端开启后,还需防火墙允许流量进入。iptables -L -n 列出当前 filter 表规则,直接过滤目标端口可以判断是否有允许规则 [4]。

iptables -L -n | grep -E ':22|ssh'

规则不存在时,默认策略可能是 DROP,导致外部无法连接。-n 跳过反向 DNS 解析,加快输出速度。

排错速查表

现象 原因 处理
ss 没有 sshd 监听 服务未启动 systemctl start sshd
grep 无输出 配置文件默认端口 22 未写 Port 行 直接按默认 22 处理
systemctl status 显示 failed 配置语法错误或端口被占用 sshd -t 检查配置,调整端口
iptables 无对应规则 防火墙未放行 iptables -A INPUT -p tcp --dport 22 -j ACCEPT

回滚与局限性

修改 /etc/ssh/sshd_config 端口后,建议先用 sshd -t 验证配置语法,再重启服务;如果新端口无法连接,可以在 VNC 或本地控制台用旧端口恢复。防火墙规则改动前建议用 iptables-save 备份当前规则。

WSL 环境下 sshd 默认未安装,上述命令中 ss 和 grep 已通过 WSL2 Ubuntu 24.04 实测,systemctl status sshd、iptables 及 sshd_config 的实际输出需在已安装 openssh-server 的系统上验证 [2]。

附录

  • 测试机:WSL2 Ubuntu 24.04
  • 内核:Linux 6.8.0-31-generic
  • 测试日期:2026-11-03
  • 观察结果:ss -tlnp | grep :22 在未安装 sshd 时无输出;grep ^Port /etc/ssh/sshd_config 在 openssh-server 未安装时返回 “NO_SSH_CONFIG”;iptables -L -n 正常输出 filter 表规则(当前无自定义规则)。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。