ansible批量管理工具
一,常见的管理工具
(1)ansible so easy 500台以下的服务器
(2)saltstack 比较复杂
(3)puppet 超级复杂
2, ansible介绍
ansible利用ssh通道。这样一来就需要免秘钥的脚本
(1)做一个实验
vim /etc/ssh/ssh_config 先把这里边的
sshd_config是 ssh服务器的配置文件
StrictHostKeyChecKing (ask 换成no) (秘钥时弹出来yes和no关了)
(2)vim /etc/ssh/sshd_config 在看它的配置文件
17行 Port 端口要改成10000以上 先不改
38行 root(超级用户)远程登录 改成no拒绝 工作中一定要这样 (但我现在做实验先选yes)
(所有远程方式是不能登录超级用户的)
43行 开启公钥 默认是开的 工作中也是开的。
47行 这行是验证文件放的位置,这行不变工作中也是这样(.ssh/authorized_keys)
65行 密码验证 这要是NO了 所有密码登录就失效了,只能秘钥登录, 要不然就是密码登录要不就是秘钥登录,
79行 改成NO 这是为提高ssh解析速度。
115行 改成no 禁止DNS反向解析。为了加快ssh的连接速度。
改好后:从启下; systemctl reload sshd (但我现在都没改为了做实验)
(3)现在我先建一个超级用户的秘钥登录(工作中是不允许的,实验用)
[root@ctw]# 我现在是超户的密码登录 (就是直接用shell用密码连的虚拟机)
1, 首先#cd .ssh 进入.ssh目录
#ssh-keygen 创建秘钥对
#cd .ssh 进入秘钥对目录
2, 把私钥 id_rsa 拿出来 放到桌面上 (这私钥是给shell拿的, shell去连虚拟机就是服务器所以虚拟机拿的是公钥)
3, 之后得把公钥改名字#cat id_rsa.pub > authorized_keys
在改公钥的权限#chmod 600 authorized_keys
4, 之后再新启一个shell 这新启的shell所登录的虚拟机就是我现在登录的虚拟机, 我现在登录的是用密码方式, 现在我要改为shell方式。
新启的shell窗口需要设置 新建后左上角“身份验证”进去后第一行方法选第二个公钥。用户名选你要登录的用户(现在选root超户)
第四行添加上 刚才放在桌面的私钥 确定,连接 这就是秘钥对的登录方式。
5,登录进去后,vim /etc/ssh/sshd_config 就可以更改它的配置文件
65行 密码验证 这要是NO了 所有密码登录就失效了,只能秘钥登录, 要不就密码登录要不就是秘钥登录, 现在这行就可以选择no了 因为我现在是秘钥登录。(就算普通用户也不能密码登陆了)
(4) 接下来我创建一个普通用户
1,#useradd yunjisuan
不用设密码 因为一会我要用秘钥登录。
而且上一步我已近把密码登录关闭了
2,我把/root/.ssh 里的公钥复制到/home/yunjisuan
#cp authorized_keys /home/yunjisuan
3,#cd /home/yunjisuan
创建.ssh #mkdir .ssh
4,把/home/yunjisuan下的公钥给.ssh移过去
#mv authorized_keys .ssh
5,在改.ssh目录的权限# chmod 700 .ssh
改.ssh 目录的属主属组都为yunjisuan #chmod –R yunjisuan.yunjisuan .ssh
-R 递归 就是把.ssh目录下的公钥authorized_keys 属主属组也改成yunjisuan.yunjisuan
6, 现在shell登录就可以了, 私钥还是刚才那个私钥,因为公钥是复制过来的。
现在状态是我shell连接的普通用户
(5)
现在我用秘钥登陆的是普通用户yunjisuan,我要切换到超级用户 这时得需要密码但是这样不行,我需要改变些配置,在超级用户# visudo 做一下添加:
root ALL=(ALL) ALL
yunjisuan ALL= NOPASSWD:ALL(免秘钥)
之后在普通用户sudo –l 显示出自己(执行 sudo 的使用者)的权限
之后su – root 切超级用户这样需要密码
sudo su – 免秘钥直接切换到超级用户
(6)切换到超级用户后现在我可以改 配置了
#vim /etc/ssh/sshd_config
17行 Port 端口要改成22221
38行 root(超级用户)远程登录 改成no拒绝 工作中一定要这样 (但我现在做实验先选yes)
65行 密码验证 这要是NO了 所有密码登录就失效了,只能秘钥登录, 要不然就是密码登录要不就是秘钥登录,
79行 改成NO 这是为提高ssh解析速度。
115行 改成no 禁止DNS反向解析。为了加快ssh的连接速度。
改好后:从启下; # systemctl reload sshd
#ss –antup | grep 22221 回车 看下监听端口
现在我用秘钥登录普通用户 改下端口22221,就可以登陆了普通用户了
然后用:#sudo su – 免秘钥直接切换到超级用户这就能办公了。
现在这个服务器只能用秘钥登陆,而且只能是普通用户。
3,配置ansible
(1)Ansible默认配置文件在#:ll /etc/ansible/hosts
#> /etc/ansible/hosts 直接清除
#vim /etc/ansible/hosts
[nginx] 模块名
WebA ansible_ssh_host=192.168.29.146
Web2 ansible_ssh_host=192.168.29.147 这个用密码登录后边加上密码ansible_ssh_pass=666666 写在ip后边
在有秘钥的情况下这就配置完了
把公钥给WebA发过去放在他~/.ssh里
# ssh 192.168.29.146 看能不能连接上
之后#ansible WebA -m ping (-m ping就是看下目标通不通)
#ansible 被管理范围 –m 模块 –a 具体命令
(2)如果#ansible nginx –m ping 被管理范围是模块名那么这两个内容一起分发。
如果#ansible all –m ping 所有模块全都发。
4,模块
1,command模块 是给对方分发命令。 不支持管道符和重定向
#ansible all –m command –a ‘uptime’ 获取全部对方的平均负载值
#ansible all –m command –a ‘hostname -I’ 获取对方所有设备的IP地址
这个模块已经淘汰 完全可以用 shell代替, 他是支持管道符和重定向的。
未完