Test Kitchen执行Inspec测试时出现SSH密钥算法错误
看起来你碰到了Test Kitchen和RHEL 9这类新系统之间的SSH密钥算法兼容坑,我之前在测试基于RHEL 9的节点时也遇到过几乎一模一样的问题——Converge阶段能正常跑,但到Verify阶段就因为SSH密钥算法不匹配卡壳了。
其实核心原因是RHEL 9默认收紧了SSH安全策略,禁用了较旧的ssh-rsa签名算法,而Test Kitchen依赖的SSH客户端(比如net-ssh)可能还在默认尝试使用这个算法,或者反过来,导致双方协商算法时不匹配。
给你几个靠谱的解决办法,按操作复杂度排序:
修改Test Kitchen配置(最直接)
打开你的.kitchen.yml,在对应的平台配置下添加SSH传输层的算法指定,比如:platforms: - name: default-rhel-9 transport: name: ssh ssh_options: user_known_hosts_file: /dev/null host_key_algorithms: ["ssh-rsa", "rsa-sha2-256", "rsa-sha2-512"]这样强制让Test Kitchen的SSH客户端支持新旧两种算法,就能和RHEL 9的SSH服务端顺利协商了。如果只想临时兼容
ssh-rsa,也可以直接把host_key设为ssh-rsa。修改本地SSH全局配置(一劳永逸)
如果经常测试RHEL 9这类节点,直接在~/.ssh/config里添加针对测试主机的规则:Host default-rhel-9 HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa这样以后不管是Test Kitchen还是手动SSH连接,都会自动启用兼容的算法,不用每次改Test Kitchen的配置文件。
升级SSH依赖库(治本)
有些时候是因为Test Kitchen依赖的net-sshgem版本太旧,不支持rsa-sha2-256这类新算法。你可以尝试升级这个依赖:gem update net-ssh如果是用Bundler管理依赖,就在项目的Gemfile里指定更高版本的
net-ssh(比如>= 6.0),然后执行bundle install更新。
另外,你可以先试试kitchen diagnose --all命令,查看当前的SSH传输配置细节,确认修改后的配置是否生效;也可以手动用SSH连接测试节点(比如ssh default-rhel-9),看看手动连接时会不会出现同样的错误,帮助定位问题。
备注:内容来源于stack exchange,提问作者Daniel Carrington

