如何在Chef中限制SSH仅允许指定IP访问?附报错解决
解决Chef配置SSH指定IP访问时的资源报错及正确配置
一、修复Chef Recipe的报错问题
报错核心原因:
- Chef不支持在
service[]资源引用中用逗号分隔多个服务名; openssh-client是客户端工具,不需要后台服务,修改SSH服务端配置完全无需重启它。
修正后的Recipe代码
apt_package 'openssh-server' do action :upgrade end service 'openssh-server' do action [:enable, :start] # 同时启用并启动服务,原代码仅enable未确保服务运行 end # openssh-client仅需安装,无需配置服务 apt_package 'openssh-client' do action :upgrade end cookbook_file '/etc/ssh/sshd_config' do source 'sshd_config' action :create mode '0600' # 必须添加,sshd_config要求严格的文件权限(所有者root,权限0600) notifies :restart, 'service[openssh-server]', :immediately end
二、正确配置SSH仅允许指定IP访问
你当前的sshd_config仅设置了ListenAddress XXX.XXX.XXX.XX,这仅让SSH服务监听该IP,但无法阻止其他IP发起连接请求。要实现「仅允许指定IP访问」,需添加以下配置之一:
方案1:用AllowUsers限制来源IP
在sshd_config末尾添加:
AllowUsers *@XXX.XXX.XXX.XX
效果:允许所有系统用户从指定IP(XXX.XXX.XXX.XX)登录SSH,拒绝其他IP的所有连接请求。
方案2:用Match规则实现更细粒度控制
比如仅允许特定用户从指定IP登录,其他IP全部拒绝:
# 允许指定IP的指定用户登录 Match Address XXX.XXX.XXX.XX AllowUsers your_target_username # 拒绝所有其他IP的SSH登录 Match Address !XXX.XXX.XXX.XX DenyUsers *
注意事项
修改sshd_config后,先在服务器上手动执行sshd -t验证配置语法是否正确,确认无报错后再重启服务,避免因配置错误导致无法SSH登录。
内容的提问来源于stack exchange,提问作者user938e3ef455
相关产品推荐
相关产品推荐

