使用 cron 进行 Debian 系统升级

使用 cron 进行 Debian 系统升级

我明白,是否应该执行自动和无人值守的系统升级的问题是极具争议的,但让我们假设我到目前为止从未对这一概念有过任何问题。

设置如下:精简的Debian基础服务器系统,例如运行ApacheSSH服务器,通过非常严格的iptables规则和硬件进行适当保护firewall。有一项日常cron工作要做以下事情:

apt-get update &&
apt-get upgrade -y &&
apt-get dist-upgrade -y &&
apt-get autoremove -y &&
service apache restart &&
service ssh restart

其背后的想法是:如果软件有更新,而该更新是外界唯一的攻击面,则安装并重新启动该软件。(即使 Apache 和 SSH 未升级,也会重新启动,此时服务停机时间不到一秒)。

Apache现在,我的问题是,当和有更新时SSHdpkg会询问是否应保留原始配置或将其替换为通用默认配置。不幸的是,这是一个基于菜单的提示,无法使用简单的管道来yes选择正确的答案。有什么想法可以编写脚本吗?

答案1

您可以尝试“-qq -y”,但这是不是受到推崇的。

-q, --quiet 安静。生成适合日志记录的输出,省略进度指示器。q 越多,安静程度就越高,最多为 2。您还可以使用 -q=# 来设置安静级别,覆盖配置文件。请注意,安静级别 2 意味着 -y,您永远不应该在没有无操作修饰符(如 -d、--print-uris 或 -s)的情况下使用 -qq,因为 APT 可能会决定做一些您意想不到的事情。

我想最好先模拟升级,然后再决定是否'安全的'是否强制升级,取决于是否需要强制升级。

模拟:

# apt-get -qq -s upgrade

强制升级:

# apt-get -qq -y upgrade

参考;

apt-get 人

答案2

根据Debian 手册您可以通过添加以下行来避免配置文件问题:

DPkg::options { "--force-confdef"; "--force-confold"; }

到您的/etc/apt/apt.conf.d/local文件(local之前创建的文件)

或者在命令中包含上述选项apt

apt -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" full-upgrade

进一步发展避免配置文件问题

dpkg处理配置文件更新,但在执行此操作时,会定期中断其工作以请求管理员的输入。这让那些希望以非交互方式运行更新的人感到不快。这就是为什么该程序提供允许系统根据相同逻辑自动响应的选项:--force-confold保留文件的旧版本;--force-confnew将使用文件的新版本(即使文件未被管理员更改,也会尊重这些选择,但这很少会产生预期的效果)。添加选项--force-confdef告诉dpkg在可能的情况下自行决定(换句话说,当原始配置文件未被触及时),并且仅在其他情况下使用--force-confnew或。--force-confold

相关内容