SSH服务需显式配置ListenAddress 192.168.1.100并设AddressFamily inet,禁用0.0.0.0和::,验证ss -tlnp仅显示该IP:22,再配合防火墙或AllowUsers限制访问。

要让 SSH 服务只监听某一张网卡的特定 IPv4 地址(比如内网管理口 192.168.1.100),关键不是“禁用其他网卡”,而是**显式指定监听地址 + 强制协议族为 IPv4**。默认的 ListenAddress 0.0.0.0 或未配置时的自动绑定,都会导致监听所有接口,哪怕你只想要一个 IP。
明确配置 ListenAddress
编辑 /etc/ssh/sshd_config,找到或添加 ListenAddress 行:
- 删掉或注释掉
ListenAddress 0.0.0.0和ListenAddress :: - 写入你要绑定的具体 IPv4 地址,例如:
ListenAddress 192.168.1.100 - 确保该 IP 当前已分配且生效:运行
ip -4 addr show能查到它,不是临时别名或 DHCP 动态获取后可能漂移的地址
必须设置 AddressFamily inet
AddressFamily any(默认)会让 sshd 同时尝试监听 IPv4 和 IPv6,即使你只写了 IPv4 的 ListenAddress,它仍可能额外监听 [::]:22。所以必须显式设为:
AddressFamily inet- 确认配置文件中没有其他
AddressFamily行被启用(如inet6或any)
验证是否生效
重启服务后,用最直接的方式检查:
sudo systemctl restart sshdsudo ss -tlnp | grep :22
正确输出应只含类似 192.168.1.100:22 的行,不含 *:22(表示监听所有 IPv4)或 [::]:22(表示还在监听 IPv6)。
注意防火墙和访问控制联动
仅靠 ListenAddress 只控制“SSH 进程听谁”,不等于“谁可以连”。如果该 IP 对应的网卡暴露在公网,还需配合防火墙白名单(如 firewalld 的 rich-rule)或 AllowUsers user@ip 做二次限制,避免仅靠监听地址误判为安全。











