ansible部署

ansible安装部署

| 主机名  | ip           | 说明   |
| ------- | ------------ | ------ |
| master  | 192.168.6.80 | 管理机 |
| client1 | 192.168.6.22 | 客户机 |
| client2 | 192.168.6.23 | 客户机 |

ansible管理机部署

1.安装ansible软件
[root@sql ~]# yum install epel-release ansible libselinux-python -y
​
2.查看ansible软件
[root@sql ~]# rpm -ql ansible |egrep '^/etc|^/usr/bin'
/etc/ansible                         #Ansible软件主目录
/etc/ansible/ansible.cfg        #Ansible主配置文件
/etc/ansible/hosts                    #Ansible软件被管理节点的主机列表文件
/etc/ansible/roles                
/usr/bin/ansible                        #Anisble批量管理命令
/usr/bin/ansible-2
/usr/bin/ansible-2.7
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-console-2
/usr/bin/ansible-console-2.7
/usr/bin/ansible-doc
/usr/bin/ansible-doc-2
/usr/bin/ansible-doc-2.7
/usr/bin/ansible-galaxy
/usr/bin/ansible-galaxy-2
/usr/bin/ansible-galaxy-2.7
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook            #Ansible程序剧本执行命令
/usr/bin/ansible-playbook-2
/usr/bin/ansible-playbook-2.7
/usr/bin/ansible-pull
/usr/bin/ansible-pull-2
/usr/bin/ansible-pull-2.7
/usr/bin/ansible-test
/usr/bin/ansible-vault
/usr/bin/ansible-vault-2
/usr/bin/ansible-vault-2.7
​
3.检查版本
[root@sql ~]# ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

ansible客户机部署

安装如下依赖软件

yum install epel-release libselinux-python -y

Ansible批量管理方式

批量管理主机有两种方式:

  • 传统的密码认证

  • 密钥管理

配置基础环境,Ansible管理的主机清单

1.备份配置文件
cp  /etc/ansible/hosts{,.bak}
​
2.添加客户机的ip地址
[root@sql ~]# cat /etc/ansible/hosts
[client]
192.168.6.22
192.168.6.23

密码认证方式

Ansible是直接利用本地SSH以及一些远程SSH服务作为客户端的,且基本上客户端的SSH服务默认都是开启的,无须额外配置

[root@sql ~]# ansible client -m command -a "hostname" -k -u root
SSH password: 
192.168.6.23 | CHANGED | rc=0 >>
web02
192.168.6.22 | CHANGED | rc=0 >>
rsync01

如果报错:

1.手动访问客户端机器,生成指纹密钥
ssh root@192.168.6.22
ssh root@192.168.6.23

配置免密登录

对于主机列表文件的配置参数修改

| 参数             | 参数类型 | 参数说明                  |
| ---------------- | -------- | ------------------------- |
| Ansible_host     | 通用连接 | 远程主机ip                |
| ansible_port     | ↑        | 设置SSH连接端口,默认22   |
| Ansible_user     | ↑        | 默认SSH远程连接的用户身份 |
| Ansible_ssh_pass | 连接控制 | 指定SSH远程主机密码       |

Ansible软件使用的前提是SSH+KEY免密验证的环境,如果没有配置也可以使用Ansible,如下

[root@sql ~]# cat /etc/ansible/hosts
[client]
192.168.6.22 ansible_ssh_user=root ansible_ssh_pass=1234
192.168.6.23 ansible_ssh_user=root ansible_ssh_pass=1234

现在可以不用输入密码,就可以登录远程操作服务器

# -m是默认参数, -k 输入密码,都可以省略
​
[root@sql ~]# ansible client -a "hostname"
192.168.6.23 | CHANGED | rc=0 >>
web02
192.168.6.22 | CHANGED | rc=0 >>
rsync01

SSH密钥方式

比起SSH密码登录更安全方便

1.编写脚本

[root@sql scripts]# cat /usr/local/scripts/distribution.sh 
#!/bin/bash
#Date: 2022-03-04
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
SSH_Pass=1234
Key_Path=~/.ssh/id_rsa.pub
for ip in 22 23
do
        sshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.6.$ip
    done
    
# 非交互式分发公钥命令需要用sshpass指定SSH密码,通过-o StrictHostKeyChecking=no 跳过SSH连接确认信息

2.执行

bash //usr/local/scripts/distribution.sh 

修改一下ansible主机列表的文件,看一下效果

#此时我们在配置文件中没有设置用户和密码
[root@sql scripts]# cat /etc/ansible/hosts
[client]
#192.168.6.22 ansible_ssh_user=root ansible_ssh_pass=1234
#192.168.6.23 ansible_ssh_user=root ansible_ssh_pass=1234
192.168.6.22
192.168.6.23

在执行一下看看是否需要密码

[root@sql scripts]# ansible client -a "hostname"
192.168.6.23 | CHANGED | rc=0 >>
web02
192.168.6.22 | CHANGED | rc=0 >>
rsync01

!>注意

主机连接安全性上,若是用了密钥管理,那么对于管理机的安全性就得严格把控,最好禁止SSH外网连接,启用内网VPN连接,加强安全性,否则管理机被入侵,对于客户端机器是很危险的。

posted @ 2022-03-05 10:29  yuezenghui  阅读(277)  评论(0编辑  收藏  举报