我有一个 shell 脚本,它添加下面的内容sshd_config
然后重新启动 ssh。
cat << EOF >> /etc/ssh/sshd_config
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
Ciphers [email protected],[email protected],[email protected]
MACs [email protected],[email protected],[email protected]
HostKeyAlgorithms ssh-ed25519,rsa-sha2-256,rsa-sha2-512,[email protected]
EOF
它运行良好,直到我在 Debian 8 机器上运行它,该机器HostKeyAlgorithms
不支持给定的选项,因此 ssh 无法启动。HostKeyAlgorithms
使用紧急控制台删除该行解决了该问题,并且 ssh 启动了。
有没有一种巧妙的方法可以让该脚本在重新启动并冒着被锁定的风险之前检查这些HostKeyAlgorithms
(以及可能的KexAlgorithms
,Ciphers
和)是否受 SSH 支持?MACs
答案1
您可以直接使用查询选项,如手册页所示:
-Q query_option
Queries ssh for the algorithms supported for the specified ver‐
sion 2. The available features are: cipher (supported symmetric
ciphers), cipher-auth (supported symmetric ciphers that support
authenticated encryption), help (supported query terms for use
with the -Q flag), mac (supported message integrity codes), kex
(key exchange algorithms), kex-gss (GSSAPI key exchange algo‐
rithms), key (key types), key-cert (certificate key types),
key-plain (non-certificate key types), key-sig (all key types and
signature algorithms), protocol-version (supported SSH protocol
versions), and sig (supported signature algorithms). Alterna‐
tively, any keyword from ssh_config(5) or sshd_config(5) that
takes an algorithm list may be used as an alias for the corre‐
sponding query_option.
例如:
error@vmtest-debian8:~$ ssh -Q key
ssh-ed25519
[email protected]
...
检查您的手册页,因为您在旧发行版上安装了非常旧版本的 OpenSSH,并且无法使用上述所有选项。
答案2
sshd -t
在要更新的主机上 测试 sshd_config 。此外,-f
选项允许指定建议的配置文件。在可以解析新配置文件之前,无需触碰正在运行的配置文件。
将自己锁定仍然是可能的,但至少不会因为无法解析配置。
不完整的 shell 脚本提纲:
SSHD_CONFIG=$(mktemp sshd.XXXX)
# copy new config to ${SSHD_CONFIG}
sshd -t -f ${SSHD_CONFIG}
# failure if return is not 0
# install sshd_config
# restart sshd service
rm ${SSHD_CONFIG}
或者,如果你使用 Ansible 进行自动化,文件相关模块可以做类似的事情。一个validate
参数,一个命令,其中%s
替换为建议文件的副本。sshd 是模板模块的示例。
- name: Update sshd configuration safely, avoid locking yourself out
template:
validate: /usr/sbin/sshd -t -f %s
backup: yes