背景

在 mac 上修改过 SSH 端口后,需要确认当前 SSH 实际监听的端口,以及配置文件中是否生效,避免误判或锁死远程连接。

排查步骤

一、查看 SSH 当前监听端口

使用 lsof 查看系统中正在监听的 TCP 端口:

sudo lsof -iTCP -sTCP:LISTEN | grep ssh

示例输出:

launchd     1  root  7u  IPv6  TCP *:ssh (LISTEN)
launchd     1  root  8u  IPv4  TCP *:ssh (LISTEN)

说明:

  • *:ssh 表示监听的是服务名 ssh
  • ssh/etc/services 中对应端口 22
  • 当前 SSH 实际仍在监听 22 端口

该步骤反映的是 当前生效状态,优先级最高。

二、查看 SSH 服务端配置端口

查看 sshd 配置文件中的端口设置:

grep -n "^Port" /etc/ssh/sshd_config

可能结果:

  • 无输出:使用默认端口 22
  • 输出如:
17:Port 25422

表示配置文件中指定了监听端口为 25422。

注意事项:

  • # 注释的 Port 行不生效
  • 可以存在多行 Port,SSH 会监听多个端口

三、结论判断逻辑

  • lsof 显示端口为 22,sshd_config 未配置 Port SSH 使用默认端口

  • sshd_config 已配置新端口,lsof 仍显示 22 配置未加载,需要重启 sshd

  • lsof 显示新端口 修改已生效

总结

排查 SSH 端口时,先看监听状态,再看配置文件。 lsof 用来确认事实,sshd_config 用来确认意图。

两者对齐,端口状态才可信。