Ansible安装及模块
1.准备
①部署机器准备
192.168.146.101 manage01
192.168.146.102 node1
192.168.146.103 node2
192.168.146.104 node3
②ssh免密登陆
ssh-keygen
③关闭防火墙、selinux
④时间同步
⑤软件包获得
2.传公钥
①将公钥传给node1
ssh-copy-id root@node1
②将公钥传给node2
ssh-copy-id root@node2
③将公钥传给node3
ssh-copy-id root@node3
node1查看添加的公钥内容
cat .ssh/authorized_keys
如果查不到?
①切换到root用户的家目录下
cd /root
②检查并创建.ssh文件夹(如果不存在):
# -p 参数可以确保如果文件夹已存在,不会报错
mkdir -p .ssh
③创建authorized_keys文件并设置正确的权限:
# 创建文件
touch .ssh/authorized_keys# 设置 .ssh 文件夹权限为 700 (只有所有者可读、写、执行)
chmod 700 .ssh# 设置 authorized_keys 文件权限为 600 (只有所有者可读、写)
chmod 600 .ssh/authorized_keys
④现在就可以查看公钥内容了
cat .ssh/authorized_keys
3.安装ansible
apt update
apt install ansible
4.查看下载是否成功
ansible --version
5.创建ansible文件
mkdir /etc/ansible
切换到ansible文件路径下
cd /etc/ansible
6.注意要在/etc/ansible下编辑hosts文件
hosts文件内容:
这就完成了,接下来就可以用一些模块了
Ansible常用模块
Ansible命令模式(ad-hoc)格式
ansible -m 模块名 -a '参数1=值1 参数2=值2' 主机名/组名/all
ansible [目标主机/组] -m [模块] -a "[模块参数]"
hostname模块:修改主机名
ansible -m hostname -a "name=node1" node1
ping模块:测试服务器网络是否正常
ansible -m ping all
file模块:远程文件与权限操作
包含touch、rm、mkdir、ln、chmode、chown命令的功能;
参数 | 说明 |
---|---|
path | 文件绝对路径 |
state | 操作(touch文件新建、absent删除、link软连接、hard硬链接、directory目录创建) |
owner | 设置所有者 |
group | 设置所属的组 |
mode | 权限 0000 |
recurse | 递归 yes or no |
批量创建文件
ansible -m file -a 'path=/root/xxx state=touch owner=root group=root mode=777' group1
批量删除文件
ansible -m file -a 'path=/root/xxx state=absent' group1
创建软连接
ansible -m file -a 'src=/etc/passwd path=/root/pass state=link' node1
copy模块:远程复制
参数 | 说明 |
---|---|
src | 文件源路径 |
dest | 目标路径 |
content | 往目标文件输入内容 |
force | 强制 yes or no |
backup | 是否备份有冲突的源文件[文件名相同,内容不同] yes or no |
checksum | 拷贝完整性校验,使用sha1sum生成校验码 |
owner | 目标文件所有者 |
group | 目标文件所属组 |
mode | 目标文件权限 |
ansible group1 -m copy -a "src=/root/readme dest=/root checksum=f951b101989b2c3b7471710b4e78fc4dbdfa0ca6 owner=root group=root mode=0400"
src目录最后加/拷贝的目录是目录中的所有内容,不加/拷贝的目录是本身
ansible -m copy group1 -a "src=/root/dir0 dest=/root owner=root group=root mode=0400"
添加内容
ansible -m copy group1 -a "content='ABCDEFG/n' dest=/root/readme"
删除.txt
ansible -m shell group1 -a 'rm -rf *.txt'
fetch模块:从Node节点下载文件到Mange节点
ansible -m fetch -a 'src=远程路径 dest=本地路径'
user模块:管理用户账号和用户属性
常用参数 | 说明 |
---|---|
name="" | 指定用户名 |
password="" | 指定密码,必须是密文 |
state= absent|present | 删除|创建 |
system= yes|no | 是否为系统用户 |
shell="" | 指定登陆shell |
generate_ssh_key= yes|no | 是否创建秘钥对 |
uid= | 指定用户的uid |
append= yes|no | 用户是否追加到其他组 |
group= | 用户属组 |
groups= | 将现有用户加入到某个组,空值就会把该用户从所有所属组中删除 |
create_home= yes|no | 是否建立家目录 |
remove= yes|no | 删除家目录 |
创建用户:
创建一个用户sky,密码是123
要求是系统用户
非交互式登陆
要求生成自己的秘钥对
不创建家目录
ansible group1 -m user -a 'name=sky password="$1$5V.qzSEd$Yr08MU8K.vXeBZcmavypk1" state=present system=yes shell=/sbin/nologin generate_ssh_key=yes'
删除用户:
ansible -m user 192.168.8.21 -a "name=baishuming1 state=absent remove=yes"
group模块:用于管理用户组和用户组属性
参数 | 说明 |
---|---|
name= | 组名 |
state= persent|absent | 创建|删除 |
system= yes|no | 是否为系统组 |
gid | gid |
创建组:
ansible -m group group1 -a "name=admin gid=4444 state=present"
删除组:
ansible -m group group1 -a "name=admin state=absent"
cron模块:用于管理周期性时间任务
参数 | 说明 |
---|---|
name | 计划任务的名称 |
user | 执行计划任务的用户 |
job | 计划任务命令 |
minute | 执行计划任务的分 默认为* |
hour | 执行计划任务的时 默认为* |
day | 执行计划任务的日 默认为* |
month | 执行计划任务的月 默认为* |
week | 执行计划任务的周 默认为* |
state absent | 删除计划任务 |
每天10:23 执行echo “haha”>/tmp/test
ansible -m cron group1 -a 'name="cron test" user=root job="echo haha > /tmp/test" minute=23 hour=10'
删除cron任务
ansible -m cron group1 -a 'name="cron test" state=absent'
反馈字体颜色 :
绿色 未发生变化
黄色 更改生效
红色 执行错误