参考:
ansible 学习_ansible中文文档_Direct_的博客-CSDN博客
安装:
sudo apt-get install ansible
sudo apt install -y sshpass
pip install ansible
# 设置初次登录远程ssh机器的时候不需要验证
sed -i 's/#host_key_checking = False/host_key_checking = False/g' /etc/ansible/ansible.cfg
/etc/ansible/hosts 文件的作用
/etc/ansible/hosts 是主机清单配置文件,由 ansible.cfg文件中的 inventory 变量配置,默认值为/etc/ansible/hosts
在使用ansible命令前,需要对hosts文件进行相关主机清单配置
使用说明
1.可以不对主机进行分组,如果不指定分组,需要配置在所有的分组前
2.可以对主机进行分组,中括号里包含的名字代表组名
3.主机可以使用域名,主机名,ip地址表示,一般以IP居多
4.常用内置参数
参数名称 | 作用说明 | 举例 |
---|---|---|
ansible_ssh_host | #用于指定被管理的主机的真实IP | ansible_ssh_host=192.168.1.1 |
ansible_ssh_port | #用于指定连接到被管理主机的ssh端口号,默认是22 | ansible_ssh_port=2000 |
ansible_ssh_user | #ssh连接时默认使用的用户名 | ansible_ssh_user=dba |
ansible_ssh_pass | #ssh连接时的密码 | ansible_ssh_pass=test1234 |
ansible_sudo | #sudo用户 | ansible_sudo=dba |
ansible_sudo_pass | #使用sudo连接用户时的密码 | ansible_ssh_pass=test1234 |
ansible_sudo_exec | #如果sudo命令不在默认路径,需要指定sudo命令路径 | ansible_sudo_exec=/usr/bin/sudo |
ansible_ssh_private_key_file | #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项 | ansible_ssh_private_key_file=/root/key |
ansible_shell_type | #目标系统的shell的类型,默认sh | ansible_shell_type=bash |
ansible_connection | SSH 连接的类型: local , ssh , paramiko,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提) | ansible_connection=local |
ansible_python_interpreter | #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径 | ansible_python_interpreter=/usr/bin/python2.7 |
ansible_*_interpreter | #其他解释器路径,用法和ansible_python_interpreter类似,这里”*”可以是ruby或才perl等其他语言 | ansible_*_interpreter=/usr/bin/ruby |
hosts文件写法举例
# vi /etc/ansible/hosts
连续的IP写法
-
# 连续的IP写法,表示192.168.1.20到192.168.1.50,共31台主机:
-
[test1]
-
name1 ansible_ssh_host=192.168.1.[20:50] ansible_ssh_user="root" ansible_ssh_pass="1234" ansible_ssh_port=22
不进行分组的写法
-
# 放在所有分组前面,可以为server起个名字,
-
# 可以显示加参数的方式,也可以直接写ip,分组时写法也一样:
-
# 这里name1,name2为别名
-
name1 ansible_ssh_host=172.16.79.231 ansible_ssh_user=dba ansible_ssh_pass=test1234
-
name2 ansible_ssh_host=172.16.79.232
-
172.16.79.233
分组写法
-
# 中括号内为分组名,可以对某一类型的服务器进行分类,执行命令时,可按照组进行操作
-
[oraservers]
-
name1 ansible_ssh_host=172.16.79.231 ansible_ssh_user=dba ansible_ssh_pass=test1234
-
name2 ansible_ssh_host=172.16.79.232
-
172.16.79.233
-
[webservers]
-
web1 ansible_ssh_host=172.16.79.233
-
web2 ansible_ssh_host=172.16.79.234
带参数的群组写法
-
# 带参数的群组,为组内所有的成员指定共同的参数,
-
# 这样就不需要在每一个IP后面重复写系统的参数,格式为 [组名:vars]
-
[parserver]
-
name1 ansible_ssh_host=172.16.79.232
-
name2 ansible_ssh_host=172.16.79.233
-
[parserver:vars]
-
ansible_ssh_user=dba
-
ansible_ssh_pass=test1234
群组整合
-
# 群组整合,格式为 [<newgroup_name>:children],
-
# children底下为父群的子群组,可直接调用父组名
-
[group:children]
-
oraservers
-
webservers
-
#示例二
-
[nginx]
-
192.168.56.108
-
[tomcat]
-
192.168.56.109
-
[zabbix-agent:children]
-
nginx
-
tomcat
单独秘钥管理
-
#ssh root@服务器B
-
#ssh-****** 如果要重命名可以自己指定, 回车后生成**对
-
# echo ~/.ssh/id_rsa.pub >> known_hosts 这里把生成的公钥放入known_hosts
-
# 如果自己配置了ssh_config, 关闭了known_hosts, 可能就需要写进~/.authorized_keys里面去了.
-
# 把服务器B上的私钥回传到ansible执行的服务器A的ssh_keys里, 命名为
-
# 服务器B_ip_.key
-
# 给ssh_keys文件夹授权为700, 一定要700, 其它的都会报错.
-
# 建立hosts文件里面指定server, 每个server一行.
-
[test_server]
-
10.0.1.5 ansible_ssh_private_key_file=ssh_keys/10.0.1.5.key ansible_ssh_user=root
Ansible 命令调用方式
按名称调用
- ansible name1 -m ping
调用所有host机器
- ansible all -m ping
按ip调用
- ansible 172.16.79.233 -m ping
按组调用
- ansible webservers -m ping
两个组一起调用,以”:”连接多个组
- 调用两个主机组的写法,以下webservers和dbservers都会被调用:
- ansible parserver:oraservers -m ping
在webservers组中但不在dbsersers中的调用
- ansible webservers:!dbservers -m win_ping
在webservers组中并且在dbservers组中的才会调用:
- ansible webservers:&dbservers -m ping
对整合后的群组进行调用
,会调用父群group下的子组oraservers和webservers下所有的成员
- ansible group -m ping
在调用前加~,代表正则表达式
ansible ~(web|db).*.91it.org -m win_ping
组合的例子
webserver:dbservers:&nginx:!ntp
列出主机清单
- ansible <groupname>|<ip>|<name> –list
- Eg: ansible oraservers –list
自定义新的主机清单文件
- cat /etc/ansible/test-hosts
[testserver]
10.10.10.1
10.10.10.2# 以-i指定新的主机清单文件
ansible -i /etc/ansible/test-hosts testserver -m ping
hosts文件中没有定义的IP或别名,在进行调用中,会提示错误。ansible对单台服务器的调用,服务器IP或域名必须有写在hosts里