修改/etc/ssh/moduli后是否需固定OpenSSH软件包?
关于修改/etc/ssh/moduli后包更新是否会被覆盖的问题
好问题!针对你在Debian 9.3和Linux Mint 18.3上的情况,咱们从Debian系(包括Mint,因为它基于Ubuntu,而Ubuntu又源自Debian)的包管理规则来拆解:
核心逻辑:dpkg对修改后配置文件的处理
Debian/Ubuntu的dpkg工具在处理包更新时,会自动检测配置文件是否被用户修改过。对于/etc/ssh/moduli这个文件(它属于openssh-client包,你可以用dpkg -S /etc/ssh/moduli命令确认归属),如果你已经修改过它,当你更新openssh-client包时:
- dpkg不会直接覆盖你的修改版本,而是弹出交互提示,给你几个选项:
- 保留你当前的修改版本(默认选项,一般选
N) - 替换成包提供的新版本(选
Y) - 对比你的版本和新版本的差异(选
D) - 查看更多帮助(选
H)
- 保留你当前的修改版本(默认选项,一般选
避免交互提示的进阶方案
如果你不想每次更新都被这个提示打扰,又不想固定openssh-server/openssh-client包,可以用dpkg-divert命令把这个文件“转移”到安全位置,让包更新时不触碰你的自定义版本:
# 告诉dpkg要重定向这个文件 sudo dpkg-divert --local --rename --add /etc/ssh/moduli # 把你修改后的文件移到新位置 sudo mv /etc/ssh/moduli /etc/ssh/moduli.custom # 创建符号链接,让系统仍能找到它 sudo ln -s /etc/ssh/moduli.custom /etc/ssh/moduli
这样后续更新openssh-client时,包会把新的默认moduli文件安装到/etc/ssh/moduli.dpkg-dist,而你的自定义版本会一直保留在/etc/ssh/moduli.custom,完全不会被覆盖。
总结
- 默认情况下,你修改后的
/etc/ssh/moduli不会被自动覆盖,更新时会让你手动选择是否替换; - 如果想彻底跳过交互提示,用
dpkg-divert是最适合的方案,不用固定包也能保住你的修改。
内容的提问来源于stack exchange,提问作者Vlastimil Burián
相关产品推荐
相关产品推荐

