后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
如何连接远端机器
Ansible主机默认通过SSH协议管理远端机器。默认使用OpenSSH,需要ControlPersist、Kerberos等特性支持,Ansible主机的~/.ssh/config
中可能也需要做一些配置(比如Jump Host跳板机的配置)。旧版本OpenSSH不支持ControlPersist,此时Ansible会使用Python的paramiko
包(一个高质量的OpenSSH实现)。要使用Ansible的所有特性,建议使用高版本的操作系统和OpenSSH。
如果使用SSH协议,默认使用SSH私钥连接远端机器(建议使用ssh-agent
)。连接远端机器需要密码时,可以用--ask-pass
参数。如果在远端机器使用sudo
提升权限并且sudo
需要密码,可以用--ask-become-pass
参数。
建议:Ansible主机与远端机器在同一个网络中。
第一条命令
Ansible管理的机器资源列表,默认保存在/etc/ansible/hosts
文件中,修改生效的ansible.cfg
中的inventory
项的配置可以换成其他位置,例如:
inventory=/home/map/ansible/hosts
在/home/map/ansible/hosts
中添加如下内容,表示Ansible主机管理的远端机器是a.example.com
和b.example.com
,两个机器的组名是example
:
[example]
a.example.com
b.example.com
在开始第一个命令前,先保证Ansible主机可以通过ssh私钥的形式登录两台远端机器。
- 在Ansible主机上生成ssh密钥对:
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C ansible
然后一路回车,生成的私钥文件是~/.ssh/id_rsa
,公钥文件是~/.ssh/id_rsa.pub
。
-
把公钥内容拷贝到两台远端机器的
~/.ssh/authorized_keys
的末尾,修改远端机器的~/.ssh
目录权限为700
,authorized_keys
文件权限为600
(远端机器重装系统时,记得重新配置authorized_keys
)。 -
在Ansible主机上配置ssh-agent:
$ ssh-agent $SHELL #启动一个新的shell挂载到ssh-agent
$ ssh-add ~/.ssh/id_rsa #向ssh-agent添加私钥
- 在Ansible主机上尝试连接所有远端机器(使用Ansible主机当前登录的用户名作为登录远端机器的用户名),验证远端机器安装配置了正确的python版本。如果成功,
ping
字段返回值是pong
:
$ ansible example -m ping
a.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
b.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
注意,这个ping
模块并不是ICMP的ping命令。ansible
命令后的第一个参数,表示主机要连接的机器名或机器组名,本例中是example
。如果要连接Ansible主机的本机地址,可以使用localhost
或127.0.0.1
。-m
参数,表示使用的Ansible模块名,默认值是command
。
使用-u
参数指定连接远端机器使用的用户名:ansible example -m ping -u mars
。
以mars
用户身份连接,然后sudo
:ansible example -m ping -u mars -b
。
以mars
用户身份连接,然后切换到有sudo权限的用户loo
:ansible example -m ping -u mars -b --become-user loo
。
在远端机器上执行其他命令:
$ ansible a.example.com -a "/bin/echo hello"
a.example.com | CHANGED | rc=0 >>
hello
上面的命令使用了默认的command
模块,-a
参数表示传递给Ansible模块的参数,本例中传递给command
模块的的参数是/bin/echo hello
。
至此,我们通过Ansible敲出了在远端机器执行的第一条指令,相当于完成了Ansible工具基本使用环境的搭建。接下来建议继续阅读:学习Ansible[3]:在远端机器临时执行命令。