虽然将以下配置添加到 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
话虽如此...你是当然你想要ClientAliveInterval
30000 吗?请注意,这是不是“不活动超时”,而是一个反应迟钝检查间隔: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