我有一个ansible playbook,它通过非标准ssh端口(转发到localhost)连接到虚拟机,并且与主机用户(vagrant)不同。
ssh端口在ansible inventory中指定:
[vms]
localhost:2222
在ansible-playbook的命令行中给出的用户名:
ansible-playbook -i <inventory from above> <some playbook> -u vagrant
与VM的通信正常工作,但是,%p始终扩展为22和%r到主机用户名。
因此,我无法刷新SSH连接(使用户更改的组成员身份生效),如下所示:
- name: flush the ssh connection
command: ssh -o ControlPath="~/.ansible/cp/ansible-ssh-%h-%p-%r" -O stop {{inventory_hostname}}
delegate_to: 127.0.0.1
我在某个地方犯了一个愚蠢的错误吗?或者,是否有不同的方式来刷新SSH连接?
答案 0 :(得分:0)
展开百分比不会ansible
扩展,而是ssh
稍后展开。
抱歉,忘了添加最重要的部分
使用
command: ssh -o ControlPath=[...] -O stop {{inventory_hostname}}
将使用默认端口,因为您没有在命令行上指定它。您还必须将端口指定为&#34; flush&#34;这种联系:
command: ssh -o ControlPath=[...] -O stop -p {{inventory_port}} {{inventory_hostname}}
但我不认为这是必要的。当剧本结束时,Ansible应该清理连接,并且我没有看到为什么这样做的任何不同原因。