2019-08-21 ansible安装及主机清单

昨日补充

远程服务的配置文件

/etc/ssh/sshd_config   ssh服务端配置文件
/etc/ssh/ssh_config    ssh客户端配置文件

ssh服务端配置文件说明

Port 22 ssh服务的端口号
ListenAddress 0.0.0.0 ssh服务监听的地址
PS:服务监听的地址必须是本机系统有的IP地址
PermitEmtyPassword no 是否允许空密码登录
PermitRootLogin yes 是否允许root用户登录
PasswordAuthentication yes 是否允许密码登录
GSSAPIAuthentication yes 是否允许GSSAPI认证,影响ssh的连接效率
useDNS yes 是否允许DNS反向解析,影响ssh的连接效率

ssh的防范措施

1 .尽量使用秘钥认证,不要使用密码认证(密码要满足一定复杂度.定期修改)
2 .架构中的服务器,尽量不要配外网IP
3 .ssh服务只监听内网IP
4 .硬件防火墙的防护,根据业务情况,做访问控制 ACL安全策略(路由器) ASA(思科硬件防火墙)
5 .监控系统重要文件和目录是否被修改
6 .锁定系统重要文件
(1) 用户方面 /etc/passwd /etc/shadow /etc/group /etc/groupshadow
(2) 服务程序方面 /etc/profile.d /etc/rc.local cron(定时任务文件)
(3) 系统相关的: /etc/profile ~/.bashrc ~//bash_profile

批量管理服务的介绍

并行管理多台主机

a .实现批量分发数据
b .实现批量部署软件
c .实现批量收集信息(资产管理)
d .实现批量自动化管理 代码上线,服务重启

ansible软件的优点

a .安装部署简单
b .无daemon,修改配置,无需重启服务
c .不需要客户端,linux基于ssh通信
d .功能强大

ansible的部署过程

管理端

1)配置epel源
wget -O /etc/yum.repos.d/epel.repo     http://mirrors.aliyun.com/repo/Centos-7.repo
2)安装ansible
yum -y install ansible

被管理端

确认selinux和防火墙是否关闭

配置anisble软件的主机清单inventory

配置文件/etc/ansible/hosts
方法一:直接写入ip地址
vim /etc/ansible/hosts
172.16.1.31
172.16.1.41
172.16.1.7
方法二:写入主机组
vim /etc/ansible/hosts
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.8
方法三:嵌套写入主机组
vim /etc/ansible/hosts
[rsync:children]   #":children"是嵌入式主机组的固定格式
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.8

方法四:写入主机参数信息(内置变量)
vim /etc/ansible/hosts
[rsync_server]
172.16.1.41  ansible_user=root ansible_password=123456 ansible_port=22
[rsync_client]
172.16.1.31
172.16.1.8
==================================================================
ansible_user 连接远程端的用户
ansible_password 远程端用户的密码
anisble_port 连接的端口号
ansible_host 连接远程主机的ip地址,可以用来设置别名
方法五:组变量
vim /etc/ansible/hosts
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.8
[rsync_server:vars]    #":vars"是设置组变量的固定格式
anisble_user=root
anisble_password=123456
ansible_port=222
方法六:使用匹配符号信息
[rsync_server]
172.16.1.[1:4]   #表示172.16.1.1~172.16.1.4中所有主机
web-[a:e].odlboy.edu  #表示web-a.oldboy.edu~web-e.oldboy.edu中所有主机

ansible模块
如何学习模块

1 .简单理解模块的使用
2 .查看模块的详细说明
3 .掌握模块的参数使用方法(根据样例学习参数)

ansible返回颜色的含义

绿色: 对主机信息进行查看,操作执行成功
黄色: 对主机做出了改变
粉色: 给出的一些警告信息,忠告和建议
红色: 报错提示信息

1 .command模块,ansible的默认模块,但不支持一些特殊符号的使用如;,>,>>,|
[root@m01 ~]# ansible all -m command -a "hostname"
172.16.1.41 | CHANGED | rc=0 >>
backup
172.16.1.31 | CHANGED | rc=0 >>
nfs01
172.16.1.7 | CHANGED | rc=0 >>
web01
2. shell模块,ansible的万能模块,相当于bash
[root@m01 ~]# ansible all -m shell -a "cd /tmp;pwd"
172.16.1.31 | CHANGED | rc=0 >>
/tmp
172.16.1.41 | CHANGED | rc=0 >>
/tmp
172.16.1.7 | CHANGED | rc=0 >>
/tmp

3.script模块,允许在远程端执行脚本文件,不需要把脚本复制到远程端,也不需要给脚本加入执行权限
[root@m01 /server/scripts]# ll ansible_test.sh 
-rw-r--r-- 1 root root 26 Aug 21 15:58 ansible_test.sh
[root@m01 /server/scripts]# ansible all -m script -a "ansible_test.sh"
172.16.1.41 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 172.16.1.41 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 172.16.1.41 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}
172.16.1.31 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 172.16.1.31 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 172.16.1.31 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}
172.16.1.7 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 172.16.1.7 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 172.16.1.7 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}

作业

1.如下参数的作用

    ansible_become        是否进行强制升级
    ansible_become_method  升级的方法sudo或su
    ansible_become_user    升级成什么用户
    ansible_become_password  su或sudo的密码
[root@m01 /server/scripts]# cat /etc/ansible/hosts
[oldboy]
172.16.1.41 ansible_ssh_user=oldboy ansible_ssh_pass=123456 ansible_become_password=123456 ansible_become_user=root ansible_become=yes ansible_become_method=su
172.16.1.31 
172.16.1.7 ansible_ssh_user=oldboy ansible_ssh_pass=123456 ansible_become_password=123456 ansible_become_user=root ansible_become=yes ansible_become_method=sudo
[root@m01 /server/scripts]# ansible 172.16.1.7 -a "whoami"
172.16.1.7 | CHANGED | rc=0 >>
root
[root@m01 /server/scripts]# ansible 172.16.1.41 -a "whoami"
172.16.1.41 | CHANGED | rc=0 >>
root

2 . 以下两个模块的作用

 expect – Executes a command and responds to prompts
 telnet – Executes a low-down and dirty telnet command
expect个人理解:执行命令command,是使用responses给出的响应进行免交互????
telnet 模块及telnet命令,user登录的用户名,password登录的密码
host登录的主机IP如果不指定默认远程用户ip,command执行的命令(必须有的)?command执行的命令,所见即所得?,一般用来连接网络设备使用
[root@m01 /server/scripts]# ansible web01 -m telnet -a "command=whoami user=oldboy password=12345"
web01 | CHANGED => {
   "changed": true, 
   "output": [
       "\u001b[0mwhoami\r\noldboy\r\n\u001b[34;1m[oldboy\u001b[35;1m@\u001b[31;1mweb01 ~]$ "
   ]
}

3.免交互式 输入yes或no

ansible利用域名管理主机时, 每次都需要有yes/no确认, 如何实现免交互 
1)vim /etc/ssh/ssh_config
 35    StrictHostKeyChecking no
2)vim /etc/ansilbe/ansible.cfg
 71 host_key_checking = False

你可能感兴趣的:(2019-08-21 ansible安装及主机清单)