You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置SSH仅监听特定网络接口(或禁用指定接口的SSH监听)

如何配置SSH仅监听特定网络接口(或禁用指定接口的SSH监听)

我完全理解你的困扰——你的Linux机器上有10个网络接口(比如eth0、eth0.67、eth0.97这类),想让SSH只监听某个特定接口,但修改了sshd_configListenAddress后,发现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.18
    
    如果需要同时监听多个接口,就添加多行ListenAddress
    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

火山引擎 最新活动