如何配置SSH仅监听特定网络接口(或禁用指定接口的SSH监听)
如何配置SSH仅监听特定网络接口(或禁用指定接口的SSH监听)
我完全理解你的困扰——你的Linux机器上有10个网络接口(比如eth0、eth0.67、eth0.97这类),想让SSH只监听某个特定接口,但修改了sshd_config的ListenAddress后,发现SSH还是在所有接口上监听,对吧?咱们一步步来解决这个问题:
先排查你当前配置的问题
你之前修改的配置里,虽然添加了ListenAddress 161.49.199.18,但可能有这些细节没做到位:
- 有没有确保没有其他未注释的
ListenAddress项?比如如果ListenAddress ::(IPv6默认监听)没注释,SSH还是会监听所有IPv6接口; - 重启SSH服务的命令是否正确?不同发行版的重启命令略有差异,比如现代系统用
systemctl,旧版可能用service; - 有没有验证SSH实际的监听状态?光看配置不行,得看运行时的真实监听端口。
正确的配置步骤
1. 修改SSH配置文件
打开/etc/ssh/sshd_config(需要sudo权限):
sudo nano /etc/ssh/sshd_config
然后做以下调整:
- 注释掉所有默认的监听地址:
#Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: - 添加你想要监听的特定IP地址(每个IP对应一个允许的网络接口),比如你想让SSH只监听
161.49.199.18这个接口:
如果需要同时监听多个接口,就添加多行ListenAddress 161.49.199.18ListenAddress:ListenAddress 161.49.199.18 ListenAddress 160.48.249.170
2. 重启SSH服务
保存配置文件后,执行重启命令:
# 大多数现代发行版使用 sudo systemctl restart sshd # 旧版系统可能使用 sudo service sshd restart
3. 验证配置是否生效
执行以下命令查看SSH的监听状态:
ss -tulpn | grep sshd
如果配置生效,输出会显示SSH只监听你指定的IP,比如:
tcp LISTEN 0 128 161.49.199.18:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
这里的161.49.199.18:22就说明SSH只在这个IP对应的接口上监听,其他接口不会再响应SSH连接。
关于禁用特定接口的SSH监听
如果你的需求是禁用某个特定接口的SSH监听,不需要单独配置禁用规则——只要在ListenAddress里只列出你允许监听的接口对应的IP,不包含那个要禁用的接口的IP就可以了。
⚠️ 注意:修改SSH配置前,一定要确保你有其他应急登录方式(比如物理控制台、或者已经打开的远程会话),避免配置错误导致无法远程连接服务器。
备注:内容来源于stack exchange,提问作者Karma Yogi




