使用 cloud init config 更改 /etc/ssh/sshd_config 中的默认值

使用 cloud init config 更改 /etc/ssh/sshd_config 中的默认值

虽然将以下配置添加到 cloud_init.cfg 文件(用于构建 Ubuntu16/18 VM 的用户数据文件)确实会导致这两个参数的值从默认值 300 和 0 分别增加,正如我所希望的那样,它完全取代了更大的 sshd_config 内容,否则这些内容会在 VM 部署期间(自动)放入 /etc/ssh/sshd_config 中:

write_files:
  - path: /etc/ssh/sshd_config
    content: |
         ClientAliveInterval 30000
         ClientAliveCountMax 50

有没有办法只更改该配置中的这两个参数值,而其他参数保持不变?将整个配置和两个修改后的值放入 cloud_init.cfg 中不起作用,可能是因为格式问题。我想我应该在用于创建 sshd_config 的某些 sshd_config 模板中更改这些值,而不是直接在后者文件中更改。

提前谢谢了!

答案1

自 Ubuntu 20.04 以来,默认/etc/ssh/sshd_config附带了一个新Include /etc/ssh/sshd_config.d/*.conf指令,正是为了解决您的初始问题,并使我们免于使用和朋友进行棘手(且容易出错)的文本操作sed,因为创建一个仅包含所需覆盖的新文件要容易得多。

因此现在最好添加一个嵌入式配置文件,而/etc/ssh/sshd_config.d/不是直接编辑/etc/ssh/sshd_config

这样你cloud_init.cfg就可以:

write_files:
  - path: /etc/ssh/sshd_config.d/00-clientalive.conf
    content: |
         ClientAliveInterval 30000
         ClientAliveCountMax 50

话虽如此...你是当然你想要ClientAliveInterval30000 吗?请注意,这是不是“不活动超时”,而是一个反应迟钝检查间隔ClientAliveInterval每秒没有数据,服务器将检查客户端是否仍然处于活动状态(如果失败,则重复此操作最多次ClientAliveCountMax),并且只有在客户端处于没有反应

因此,如果您只想防止空闲断开连接,则较低的值(例如 10、30 甚至 300)就可以了。只要客户端响应式,它可以无限期地处于非活动状态而不会断开连接。确保TCPKeepAlive也设置了(默认情况下),这也可能有帮助。

对于更永久的自我监控和自动重新连接会话,您可以看看自动SSH

答案2

显然,将这​​个添加到 /etc/ssh/sshd_config 中可以解决问题(经过测试,有效):

runcmd:
  - sed -i 's/ClientAliveInterval 300/ClientAliveInterval 30000/' /etc/ssh/sshd_config
  - sed -i 's/ClientAliveCountMax 0/ClientAliveCountMax 50/' /etc/ssh/sshd_config
  - service ssh restart

相关内容