Ansible建立连接
Ansible可以通过账号密码 和 RSA Key的方式来远程控制目标机器。
本文会讲解如何配置Ansible来连接
个人Ansible 常用配置
1 | vi ansible.cfg |
使用账号密码登陆
1 | cd ${your_ansible_home} |
将ssh连接用户的账号密码设置在host文件中,上面将其设置为全局,也可以针对group设置。
Necessary Dependency
选择合适的包管理器来安装sshpass
1 | yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/sshpass-1.06-2.el7.x86_64.rpm |
Add Fingerprint
添加本机fingerprint 到目标的机器的known_hosts
第一次ssh连接远程机器时,需要用户确认是否信任目标机器,而ansible则会抛出一个异常。
解决方法很简单,手动先连接一遍,选择信任,再退出,重新使用ansible即可。
使用ssh免密登陆
这里不需要任何配置,你只需要预先设置好RSA Key就可以。
详情请见RSA免密登陆章节。
连接Docker Container
Docker Container提供了方便多样的测试环境,如何连接container有如下两种方案
- SSH连接容器
- 使用Ansible的Delegate_to
SSH
寻找镜像 创建容器
在Container中设置sshd服务,并绑定端口到外部宿主机其他端口
在这里可以直接去找预先安装了python和sshd服务的镜像,没有必要自己单独再造轮子,如果真要打镜像,没必要写docker file,太慢了,直接找个基础镜像,做完操作再commit即可。
docker run -itd –name centos-ansible –privileged -p 2222:22 be666a0ce5e7 /bin/bash
在容器中设置RSA密钥
详情见rsa免密登陆一文
Ansible 更改机器默认SSH端口
1 | vi hosts |
Delegate To
Ansible提供了Task的delegate to方法,可以把Task指定给某台机器执行。我们可以预先注册Docker Container为Host,然后将任务指定给Docker Container执行。
1 | - name: add container to inventory |
通过add_host 将container加入到host中,然后后续的所有tasks,都可以通过添加delegate_to: centos5-ansible 来指定container执行。
Note: 为每一个Module添加delegate_to过于繁复,可以使用include的配置叠加的性质,来拓展到include的所有tasks上