背景:在 Ubuntu 上,我喜欢在删除文件时sshd
尝试加载文件时防止记录错误。ssh_host_dsa_key
似乎没有配置选项可以sshd_config
阻止sshd
尝试此操作。因此,我chattr +i
在清空文件后设置不可变属性。
现在,让我们openssh-server
在答案中采用这个特定的示例(包)。
问题:如何安装一个在删除(清除)过程中包本身可能调用的任何内容之前运行的脚本?
可以想象,当 purge( apt-get --purge remove
) 包时,由于不可变属性而失败。这样的挂钩将允许我删除不可变属性并允许包删除成功。
如果无法加载 DSA 密钥,日志中会出现以下错误:
sshd[5669]: error: Could not load host key: /etc/ssh/ssh_host_dsa_key
Run Code Online (Sandbox Code Playgroud)
您可以为该dpkg
命令添加一个钩子。创建一个包含以下内容的文件/etc/dpkg/dpkg.cfg.d/my_hook
(如果目录不存在则创建该目录)
pre-invoke=/usr/local/sbin/dpkg-pre-hook\n
Run Code Online (Sandbox Code Playgroud)\n\n该程序在执行操作/usr/local/sbin/dpkg-pre-hook
之前执行。dpkg
环境变量包含正在执行的DPKG_HOOK_ACTION
操作dpkg
:install
、unpack
、configure
或其他几个之一。您不知道正在操作的包的名称 \xe2\x80\x94\xc2\xa0 这些挂钩旨在更新系统状态(例如,保持包或文档的索引为最新) ),不影响单个包的行为。尽管如此,您可以通过查看传递给 的参数来判断发生了什么。这并不完全可靠,但只要系统管理员不尝试破坏它就应该可以工作。remove
purge
dpkg
#!/bin/bash\nIFS=$\'\\t\' read -a arguments < <(</proc/$PPID/cmdline tr \'\\0\' \'\\t\')\nshift arguments\ncase $DPKG_HOOK_ACTION in\n remove|purge)\n for x in "${arguments[@]}"; do\n case $x in\n openssh-server) \xe2\x80\xa6;;\n esac\n done\nesac\n
Run Code Online (Sandbox Code Playgroud)\n\n你的例子很奇怪。几乎可以肯定你找错了树。当您删除软件包时, Ubuntu 软件包不会创建新ssh_host_ecdsa_key
文件(这是多么奇怪的事情啊!)。当您清除包时,它会删除该密钥文件(以及其他密钥文件和其他配置文件) 。如果您不希望删除密钥文件,请删除软件包而不是清除它,或者备份密钥文件。
如果您不希望 SSH 服务器使用特定的密钥类型(这可能不是一个好主意),请不要摆弄文件属性。在配置文件中使用该选项即可达到此效果:HostKey
为要使用的密钥显式传递该选项,并且将不使用默认密钥文件名。
对于包提供的文件(SSH 密钥文件不是这种情况,必须在每台计算机上生成),dpkg-divert
如果您不希望特定文件位于其包提供的位置,请使用。
归档时间: |
|
查看次数: |
3339 次 |
最近记录: |