我正在运行 Ansible 剧本,它在一台机器上运行良好。
在我第一次尝试的新机器上,我收到以下错误。
17:04:34 PLAY [appservers] *************************************************************
17:04:34
17:04:34 GATHERING FACTS ***************************************************************
17:04:34 fatal: [server02.cit.product-ref.dev] => {'msg': "FAILED: (22, 'Invalid argument')", 'failed': True}
17:04:34 fatal: [server01.cit.product-ref.dev] => {'msg': "FAILED: (22, 'Invalid argument')", 'failed': True}
17:04:34
17:04:34 TASK: [common | remove old ansible-tmp-*] *************************************
17:04:34 FATAL: no hosts matched or all hosts have already failed -- aborting
17:04:34
17:04:34
17:04:34 PLAY RECAP ********************************************************************
17:04:34 to retry, use: --limit @/var/lib/jenkins/site.retry
17:04:34
17:04:34 server01.cit.product-ref.dev : ok=0 changed=0 unreachable=1 failed=0
17:04:34 server02.cit.product-ref.dev : ok=0 changed=0 unreachable=1 failed=0
17:04:34
17:04:34 Build step 'Execute shell' marked build as failure
17:04:34 Finished: FAILURE
如果我首先转到源计算机(从我运行 ansible playbook 的位置)并手动 ssh 到目标计算机(作为给定用户)并为 known_hosts 文件条目输入“yes”,则可以解决此错误。
现在,如果我第二次运行相同的 ansible playbook,它可以正常工作。
因此,如何在第一次为给定用户(~/.ssh 文件夹,文件 known_hosts)创建 ssh known_hosts 条目时抑制 SSH 给出的提示?
我发现如果我在~/.ssh/config文件中使用以下配置条目,我可以做到这一点。
~/.ssh/config
# For vapp virtual machines
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
User kobaloki
LogLevel ERROR
即如果我将上述代码放在远程机器的用户的 ~/.ssh/config 文件中并第一次尝试 Ansible playbook,我将不会被提示输入“yes”并且 playbook 将成功运行(不需要用户手动创建从源机器到目标/远程机器的 known_hosts 文件条目)。
我的问题: 1. 如果我去 ~/.ssh/config 方式,我应该注意哪些安全问题 2. 如何将设置(配置文件中的内容)作为参数/选项传递给命令行中的 ansible 以便它将在新机器上首次运行(不提示 / 取决于目标机器上的 known_hosts 文件条目?