ansible 在远程主机上执行任务,它先要用 ssh 登录到主机,登录可以使用密码验证,也可以使用 ssh 密钥的方式,就是把在控制机上生成的公钥复制到远程主机的某个用户的主目录下的 .ssh 下面的 authorized_keys 这个文件里面。
ansible 的 authorized_key 这个模块可以完成这个任务。先在控制机上生成一对密钥 ... ssh-keygen ... 完成以后,在用户主目录下的 .ssh 这个目录的下面,会有一个 id_rsa.pub 文件,它就是公钥 ...
再回到我们的 Playbook ,添加一个新的任务 ... 名字可以是 ssh key auth ... 使用的模块是 authorized_key .. 这个模块有一些选项, 先用一个 user 选项,可以指定一下远程主机的用户,也就是你想把公钥里的内容复制到远程主机的哪一个用户的主目录的下面 ..
我这里就是 vagrant .. 然后是一个 key 选项,它的值就是公钥里的内容,这里我们可以使用一个 lookup 插件,它可以读取文件里的内容 ..
要读取的是 /root/.ssh/id_rsa.pub 这个文件的内容 .. 这个文件就是在控制机上生成的那个公钥文件。
再添加一个 state ,设置一下想要的状态,这里设置成 present ,意思就是我想让公钥的内容在远程主机上存在。
保存 .. 再去运行一下这个 playbook ...
ansible-playbook app.yml -v
注意这个运行结果里,会出现 changed ,表示这个任务改变了远程主机上的一些东西 ... 现在我们就可以不需要密码,使用 ssh 密钥的方式,使用 vagrant 这个用户登录到远程主机了 ...
之前我们在 group_vars 下面的 swarm 这个文件里,定义了一些变量,设置了 ssh 登录用的密码 ... 现在可以删除掉这个 group_vars 目录 ...
回到终端,再运行一下这个 Playbook .... 仍然可以正常运行 ... 现在用的就是 ssh 密钥的方法登录的 ...
这次运行 playbook 并没有改变远程主机上的什么东西。