在ansible (版本)中2.10)攻略我需要调用dpkg-reconfigure openssh-server命令来重新创建SSH服务器密钥。
- name: Create new SSH host's keys
shell: dpkg-reconfigure openssh-server
notify: restart sshd
问题是dpkg-reconfigure openssh-server会打开一个对话框,并且脚本会被截断...
查看ansible文档,似乎可以通过debconf模块管理dpkg-reconfigure:
与locales模块相关的代码示例:
- name: Set default locale to fr_FR.UTF-8
debconf:
name: locales
question: locales/default_environment_locale
value: fr_FR.UTF-8
vtype: select
来自openssh-server debconf模块的问题是:您希望如何处理修改后的配置文件sshd_config?答案是:保持当前安装的本地版本。
我如何使用ansible debconf模块来管理它?
发布于 2021-04-08 20:28:38
这不是debconf
问题。该文件被Debian打包标记为配置文件,并且dpkg
在通用级别上处理它。dpkg --configure
有--force-confold
,但dpkg-reconfigure
没有。
发布于 2021-01-14 05:33:08
我正在寻找一个解决方案,但我还没有找到一个可以用debconf和ansible实现的解决方案。问题是,debconf在sshd_config方面没有“选择”。当您查找debconf和preseed (Debian无人值守安装)时,没有任何参数可以指定保留当前的sshd_config。
例如,活动的debconf设置:
sudo debconf-show openssh-server
openssh-server/permit-root-login: false
openssh-server/password-authentication: false
这些是ansible debconf模块的问题。
我们正在寻找的东西,但这是不可能的:
- debconf:
name: openssh-server
question: openssh-server/keep-current-sshd-config
value: true
不幸的是,我们必须找到一种解决办法。就我的例子而言,我想在我的树莓pi上重新配置openssh- /lib/systemd/system/regenerate_ssh_host_keys.service,幸运的是,在raspbian OS server上有一个systemd文件,它做了名字所说的事情。要使用它,只需删除ssh_host_*文件并重新启动机器。
如果你需要在不同的主机上使用它,你需要找到另一种解决方法。也许可以通过ansible导入新的ssh_host密钥文件,或者构建一个小脚本。
发布于 2021-05-16 17:11:21
TL;DR;是,在重新配置时使用Ansible debconf,但mv /var/lib/dpkg/info/<package>.config
文件放在一边。
这篇文章的其余部分是为那些想深入了解debconf和Ansible的debconf模块的人准备的。
我花了一些时间研究这一点,并向Ansible debconf模块提交了一些文档,我为这个答案编辑了一些内容。
在Debian中使用debconf
重新配置包并不简单!
Ansible debconf模块不会重新配置包,它只是更新debconf数据库。需要一个额外的playbook步骤(通常通过notify if debconf make change)来重新配置包并应用更改。
现在,debconf
主要用于安装前的种子预置配置。
因此,虽然dpkg-reconfigure
确实使用了debconf数据,但它并不总是权威的,您可能需要检查您的包是如何处理的。
dpkg-reconfigure
是一个分三个阶段的过程。它使用以下参数从/var/lib/dpkg/info
目录调用控制脚本:
<package>.prerm reconfigure <version>
<package>.config reconfigure <version>
<package>.postinst control <version>
主要的问题是,许多软件包的<package>.config
重新配置步骤将首先通过检查磁盘上的配置来重置debconf数据库(覆盖Ansible模块所做的更改)。如果您的包是这种情况,那么dpkg-reconfigure
将有效地忽略此debconf
模块所做的更改。
然而,尽管dpkg-reconfigure
最终调用:
/var/lib/dpkg/info/<package>.postinst configure <version>
来实际配置这个包;使用它并不是那么简单。该脚本预计将从"debconf前端“运行,并使用IPC响应脚本中的_db_cmd
语句。
更详细地了解这一点
export DPKG_MAINTSCRIPT_PACKAGE=<package>
export DPKG_MAINTSCRIPT_NAME=<script path>
export DEBIAN_HAS_FRONTEND=1
然后运行脚本。我正在尝试设置无人值守升级,所以我运行:
sh -x /var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2
然后停止等待来自前端的响应。
正在运行
/usr/share/debconf/frontend /var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2
工作..。但与dpkg-reconfigure
有完全相同的问题--它重置了debconf数据库:(
这是因为运行
/var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2
source
的/usr/share/debconf/confmodule
,其中exec()是强制执行<package>.config
配置阶段的/usr/share/debconf/frontend
。
这是基于.config文件的存在(即使用外壳-e)而完成的,无法避免。
解决方案是在dpkg-reconfigure
(或其他相关的debconf代码)运行时使用mv /var/lib/dpkg/info/<package>.config
。
注Debian程序员手册上说,配置脚本的唯一目的是填充debconf,并且不能影响其他文件;因此,在剧本中这样做(据我所知)符合debian的策略:http://www.fifi.org/doc/debconf-doc/tutorial.html#AEN113
HTH
https://stackoverflow.com/questions/64686729
复制相似问题