Ansible通过SSH连接主机失败(报错unknown key)求助
Ansible通过SSH连接主机失败(报错unknown key)求助
我之前也碰到过类似的SSH连接报错,给你梳理下可能的原因和解决办法:
首先先确认下你遇到的完整报错信息是这样的对吧:
UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: vdollar_percent_expand: unknown key %t\r\npercent_expand failed", "unreachable": true }
这个报错的核心问题是SSH在解析配置时遇到了不支持的%t扩展变量。%t是OpenSSH较新版本才引入的变量(用来表示当前时间),如果你的目标主机SSH服务版本偏旧,或者SSH配置文件里误用了这个变量,就会触发这个“unknown key”的错误。
接下来可以按这几步排查解决:
- 先去目标主机上检查SSH服务的配置文件
/etc/ssh/sshd_config,搜一搜有没有包含%t的配置项(比如Banner、PrintMotd这类字段里经常会用到变量)。要是找到了,要么换成当前SSH版本支持的变量(比如%h代表主机名、%u代表用户名),要么直接把%t这部分删掉就行。 - 修改完配置后,记得重启目标主机的SSH服务才能生效:用systemd的话就执行
sudo systemctl restart sshd,老系统用SysVinit的话就跑sudo service ssh restart。 - 如果改了目标主机配置还是不行,再检查本地的SSH客户端配置文件(
~/.ssh/config或者系统级的/etc/ssh/ssh_config),看看有没有针对这个目标主机的配置里用到了%t,同样做修改就好。 - 另外可以先手动用SSH连一下目标主机试试:
ssh 你的用户名@目标主机IP,如果手动连也报同样的错,那肯定是SSH配置的问题;要是手动连正常,那可以试试升级Ansible或者本地的SSH客户端版本,或者在Ansible的inventory里加个ansible_ssh_extra_args="-o StrictHostKeyChecking=no"这类参数来规避配置冲突。
备注:内容来源于stack exchange,提问作者陈青海
相关产品推荐
相关产品推荐

