ansible 的作用这里就不说了直接进入安装吧
实验环境:
192.168.30.68作为ansible主机
192.168.30.69
192.168.30.70作为实验主机
安装
这里是ansible官网地址
我这里是centos的版本所以按着装就可以,其他操作系统对应文档就可以的。
[root@master1 .ssh]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
更新源并直接下载
$ sudo yum install epel-release
$ sudo yum install ansible
[root@master1 ~]# cd /etc/ansible/
[root@master1 ansible]# ll
total 24
-rw-r--r--. 1 root root 19985 Aug 22 04:07 ansible.cfg 配置文件
-rw-r--r--. 1 root root 1051 Jan 13 20:01 hosts 主机清单
drwxr-xr-x. 2 root root 6 Aug 22 04:07 roles 软件剧本
前提
实现ansible的前提是主机之间实现免密钥通信,所以我们需要再主机生成密钥。并将公钥复制到其他主机以实现管理。
生成公钥
[root@master1 .ssh]# ssh-keygen -t rsa #直接空格输入,默认会存放在/root/.ssh/下
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KZTYO/XnOxer3N6kU/S9eTVH9e99Cy1d7JMCIyyX0c4 root@master1
The key's randomart image is:
+---[RSA 2048]----+
| |
| o . . .|
| . + .. . o|
| . o.o= .+|
| +.S=.E. o*|
| oo .oo +oX|
| .+ XX|
| ..oB**|
| +=+o=|
+----[SHA256]-----+
[root@master1 ~]# ll /root/.ssh
total 12
-rw-------. 1 root root 1675 Jan 13 17:38 id_rsa
-rw-r--r--. 1 root root 394 Jan 13 17:38 id_rsa.pub
-rw-r--r--. 1 root root 700 Jan 11 15:25 known_hosts
id_rsa为私钥
id_rsa.pub为公钥,即我们需要转发的
分发公钥
这里实验机器不多,直接用的命令,有需要可以使用脚本分发
[root@master1 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.30.70
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.30.70's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.30.70'"
and check to make sure that only the key(s) you wanted were added.
可以用 ssh ‘root@192.168.30.70’ 连接远成主机看是否连接成功
PS:如果生成密钥失败了,可以看下本地/root/.ssh/目录下是否已经有密钥了
如果分发失败了,也可以去到远成主机上查看是否已经有密钥了,有的话可以删除重新分发下(因为可能与当前的密钥不一致)
node1节点
[root@node1 ~]# ll ./.ssh
total 4
-rw-------. 1 root root 788 Jan 13 17:39 authorized_keys
[root@node1 ~]# cat ./.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7Lsml6XJRtyjYZ0LonWHk2IQEw4A7fHuG8eO5OJPvxRqacyS9C9AXSH/OkLqelHDJHTm1GFjLXXq+yD/EQkvOBbUCNMClBLBl8yutFw+WLnKsZiqrerH7eT9uE1VbsLBNIHfVK1sC6FfRZMnFSxkKxb84YiWU+VJCBVXsI36Ys2pbYXVPn9UVCTQ0UVNq92IjWYaomy7ad+DaR8ZROZnEvkUOAMgPtl03UXeTrWuhJge7wiTzzn6lR73z2A/jdf0cFtz5MnC8aWpx3yfIr3dfXYW8s/9ufWfjIo9cYc2efG+6X/85ZnOKrI6iyUEJ2NAPJp1hkLMqa4PsEbxXE7+T root@master1
实现免密钥登录后,我们可以进行下一步操作
部署
## -a active
[root@master1 ~]# ansible all -a hostname
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does
not match 'all'
由于还没有添加主机,这里指定是没有信息显示的
[root@master1 .ssh]# vim /etc/ansible/hosts
主机清单配置
主机清单文件添加一个刚刚实现互通的ip
[root@master1 .ssh]# ansible 192.168.30.69 -m ping
192.168.30.69 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
#所有主机 执行 echo hello 命令
[root@master1 .ssh]# ansible all -a "echo hello"
192.168.30.69 | CHANGED | rc=0 >>
hello
[root@master1 .ssh]# ansible all -a "hostname"
192.168.30.69 | CHANGED | rc=0 >>
node1
[root@master1 .ssh]# vim /etc/ansible/hosts
[root@master1 .ssh]# ansible node -a "hostname"
192.168.30.69 | CHANGED | rc=0 >>
node1
另一种配置方式(更实用)
划分指定的组
我们也可以把ip换成域名,但是需要在本地解析
[root@master1 .ssh]# vim /etc/ansible/hosts
[root@master1 .ssh]# ansible node -a "hostname"
192.168.30.69 | CHANGED | rc=0 >>
node1
192.168.30.70 | CHANGED | rc=0 >>
node2
这里ansible初步实现安装和部署
实践
ansible用法
ansible 组名/ip地址 参数+模块 -a “用法”
这里实践一下command模块
-m command在目标端执行命令
注意:命令的执行过程不像脚本,所以变量,<,>,|,;.&都不能使用(shell模块可以)
ps:/jeff1目录是不存在的
/jeff目录是存在的
--creates
如果对端/jeff1目录不存在,则执行下一步操作
ansible 192.168.30.69 -m command -a " creates=/jeff1 touch 12345"
如果存在就跳过不执行
--removes
如果对端/jeff目录存在,则执行下一步操作
ansible 192.168.30.69 -m command -a " removes=/jeff touch 54321"
不存在则不执行
总结:
ansible连接问题策略:
1、管理端主机清单 ip不对 也有可能是网络问题
2、客户端公钥钥信息不对,或者没有建立基于密钥的连接
3、ssh远程服务没开启,防火墙策略,selinux没关
4、客户端有关ansible进程僵死了-- kill再连
伙伴们想要更加深入学习高级用法也可直接去ansible官网了解相关模块
下篇文章将讲解更多模块以及剧本的用法