首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >dpkg-reconfigure openssh-server in ansible playbook

dpkg-reconfigure openssh-server in ansible playbook
EN

Stack Overflow用户
提问于 2020-11-05 03:45:12
回答 3查看 1.3K关注 0票数 1

在ansible (版本)中2.10)攻略我需要调用dpkg-reconfigure openssh-server命令来重新创建SSH服务器密钥。

代码语言:javascript
运行
复制
- name: Create new SSH host's keys
  shell: dpkg-reconfigure openssh-server
  notify: restart sshd

问题是dpkg-reconfigure openssh-server会打开一个对话框,并且脚本会被截断...

查看ansible文档,似乎可以通过debconf模块管理dpkg-reconfigure:

与locales模块相关的代码示例:

代码语言:javascript
运行
复制
- 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模块来管理它?

EN

回答 3

Stack Overflow用户

发布于 2021-04-08 20:28:38

这不是debconf问题。该文件被Debian打包标记为配置文件,并且dpkg在通用级别上处理它。dpkg --configure--force-confold,但dpkg-reconfigure没有。

https://wiki.debian.org/ConfigPackages可能也很有用。

票数 1
EN

Stack Overflow用户

发布于 2021-01-14 05:33:08

我正在寻找一个解决方案,但我还没有找到一个可以用debconf和ansible实现的解决方案。问题是,debconf在sshd_config方面没有“选择”。当您查找debconf和preseed (Debian无人值守安装)时,没有任何参数可以指定保留当前的sshd_config。

例如,活动的debconf设置:

代码语言:javascript
运行
复制
  sudo debconf-show openssh-server  
  openssh-server/permit-root-login: false
  openssh-server/password-authentication: false

这些是ansible debconf模块的问题。

我们正在寻找的东西,但这是不可能的:

代码语言:javascript
运行
复制
- 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密钥文件,或者构建一个小脚本。

票数 0
EN

Stack Overflow用户

发布于 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目录调用控制脚本:

代码语言:javascript
运行
复制
  <package>.prerm  reconfigure <version>
  <package>.config reconfigure <version>
  <package>.postinst control <version>

主要的问题是,许多软件包的<package>.config重新配置步骤将首先通过检查磁盘上的配置来重置debconf数据库(覆盖Ansible模块所做的更改)。如果您的包是这种情况,那么dpkg-reconfigure将有效地忽略此debconf模块所做的更改。

然而,尽管dpkg-reconfigure最终调用:

代码语言:javascript
运行
复制
/var/lib/dpkg/info/<package>.postinst configure <version>

来实际配置这个包;使用它并不是那么简单。该脚本预计将从"debconf前端“运行,并使用IPC响应脚本中的_db_cmd语句。

更详细地了解这一点

代码语言:javascript
运行
复制
export DPKG_MAINTSCRIPT_PACKAGE=<package>
export DPKG_MAINTSCRIPT_NAME=<script path>
export DEBIAN_HAS_FRONTEND=1

然后运行脚本。我正在尝试设置无人值守升级,所以我运行:

代码语言:javascript
运行
复制
sh -x /var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2

然后停止等待来自前端的响应。

正在运行

代码语言:javascript
运行
复制
/usr/share/debconf/frontend /var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2

工作..。但与dpkg-reconfigure有完全相同的问题--它重置了debconf数据库:(

这是因为运行

代码语言:javascript
运行
复制
 /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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64686729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档