ansible属于第三方库,可以通过配置阿里云的镜像实现快速下载安装,它在阿里云的epel模型仓库下
在配置阿里源时,为确保正常安装,一定要清空缓存 :sudo yum clean all
再执行生成元缓存:sudo yum makecache .
元仓库缓存生成后,就可以安装ansible了:sudo yum install ansible
***********************************************************************
通常情况下,登录客户端会采用ssh秘钥登录的方式,不建议直接使用密码
可以通过代码自动生成ssh秘钥:ssh-keygen
本质上就是:A作为主机,将自己生成的ssh秘钥(公钥)发送给希望被控制,实现登陆的子机
ssh-copy-id 192.168.1.23(此处是子机ip)
ansible中的命令格式: ansible <host-pattern> [options]
----------------------------------------------------------------------------
-a #模块的参数
-C #检查
-f #用于处理高并发
--list hosts #列出主机列表
-m #模块名称
--syntax-check #语法检查
------------------------------------------------------------------------------
查看ansible生成的文件:rpm --ql ansible
关于ansible的主机配置信息目录:/etc/ansible/hosts 可以用vi 或者vim编辑器查看:vim /etc/ansible/hosts
用ansible中的ping去测试机器是否在线:ansible 192.168.1.23 -m ping
查看是否存在用户 :
tail -l /etc/passwd
tail -l /etc/shadow
id kevin
给用户设置密码:
echo ‘123456’| passwd --stdin kevin
批量创建密码:
ansible web(web是当前机器所在组) -m shell -a 'echo "123456"| passwd --stdin kevin '
执行远程文件方式:
ansible 192.169.1.122 -m shell -a 'bash a.sh'
ansible 192.169.1.122 -m shell -a '/root/a.sh' (但文件必须具有可执行权限)
ansible 192.169.1.122 -m shell -a '/root/a.py' 可用于执行远端的Python脚本
ansible web -m script -a '/root/m.sh' 执行本地的文件 管控机上的文件
ansible web -m script -a 'removes=/root/m.sh /root/m.sh' 判断被控机上是否存在该文件,存在就移除,不存在则不执行
ansible web -m script -a 'creates=/root/m.sh /root/m.sh' 判断被控机上是否已存在该文件,不存在则创建,存在则不处理
-----------------------------------------------------------------------------------
copy模块:
backup 备份
dest 目的地址
group 文件的属组
mode 文件的权限 r 4 w 2 x 1
owner 文件的属主
src 源文件
checksum 通过md5码判断文件是否需要复制
ansible db -m copy -a 'src=/root/m.sh dest=/tmp/a.sh' 复制本地文件到远程主机
ansible db -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755' 拷贝文件到远程主机并指定文件的权限
ansible web -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755 owner=kevin' 远程推送文件 指定文件权限 并修改属主
ansible web -m copy -a 'src=/etc/init.d dest=/tmp/ mode=755 owner=kevin' 复制本地目录到远程主机
ansible web -m copy -a 'src=/etc/init.d/ dest=/tmp/ mode=755 owner=kevin' 复制本地目录中的文件到远程主机
ansible web -m copy -a 'content='我的一次生最美好的场景,就是遇见你
dest=/tmp/a.txt'' 将文本内容注入远程主机文件中
---------------------------------------------------------------------------------------
file模块:
inode 硬盘的地址
id 获取的是内存的地址
ln -s a.py b.py 创建文件a.py的软链接
ln a.py c.py 创建a.py的硬链接
当源文件发生变化时,软链接和硬链接都会发生变化
ansible db -m file -a 'path=/hello state=directory' 在远程机器上创建文件夹
ansible db -m file -a 'path=/root/a.txt state=touch' 在远程机器上创建文件
ansible db -m file -a 'path=/tmp/f src=/etc/fstab state=link' 创建软链接 path是目标地址 src是源地址
ansible db -m file -a 'path=/tmp/f state=absent ' 删除文件或者文件夹
----------------------------------------------------------------------------------
fetch模块
ansible web -m fetch -a 'src=/var/log/cron dest=/tmp' src是源地址 dest 是目标地址下载被控节点中的文件
每台机器会创建一个文件夹,目录结构不会改变
***********************************************************************
查看yum的安装包组:yum group list
安装yum包组 :yum groupinstall
disablerepo :禁用repo源
enablerepo :启用repo源
name 包名
state install 安装状态
remove (absent)卸载
ansible web -m yum -a 'name=wget ' 安装wget
ansible web -m yum -a 'name=wget state=absent' 卸载wget
------------------------------------------------------------------------------------------------
pip install 安装包
pip freeze >a.txt 将Python的环境打包到a.txt文件中汇总 就有了环境名称和版本号
pip install -r a.txt 安装文件中的包
pip list 查看所有的已安装成功的包
ansible web -m yum -a 'name=nginx' 安装指定的环境
---------------------------------------------------------------------------------------
service模块:
ps -ef |grep nginx 查看进程信息
ss -tnlp 查看端口信息
systemctl start nginx centOS7启动nginx的命令
service nginx start centOS6启动nginx的命令
systemctl enabled nginx centOS7 开机自启动nginx
chkconfig nginx on centOS6开机自启动nginx
ansible web -m service -a 'name=nginx state=started' 启动nginx
ansible web -m service -a 'name=nginx state=stopped' 关闭nginx
-------------------------------------------------------------------------------------------
cron计划任务模块:
* * * * * job (分时日月周 任务)
crontab -e 编辑计划任务
crontab -l 查看计划任务
crontab -r 删除计划任务
minute 分钟
hour 小时
day 天
month 月
weekday 周
name 任务名
disabled 禁用
ansible db -m cron -a 'minute=24 job="touch /tmp/a.txt" name=touchfile' 创建一个计划任务
ansible db -m cron -a 'name=touchfile state=absent' 删除一个计划任务
ansible db -m cron -a 'minute=24 job="touch/tmp/a.txt" name=touchfile disabled=yes' 禁用计划任务
----------------------------------------------------------------------------------------
用户相关:
管理员 root 0
普通用户
系统用户 不能登录 占用端口1-999 (centos7) 1-499(centos6)
登录用户 可以登录 占用端口1000-65535 500-65535
-d 指定用户家目录
-g 指定用户组
-G 指定用户的附加组
-s 指定登录后的shell
-r 创建一个系统组
useradd -r kevin 创建一个系统用户 倒序从999开始
useradd -s /sbin/nologin kevin 创建普通用户从1000开始
useradd -d /opy/kevin kevin 创建用户时指定用户的家目录
useradd -u 3000 lisa 创建用户 并指定其ID
userdel kevin 删除用户 但其家目录会保留
userdel -r kevin 删除用户 节目录也删除
groupadd Kevin 创建用户组
groupdel Kevin 删除用户组
-------------------------------------------------------------------------------------
user模块:
group 组
groups 附加组
home 家目录
name 用户名
password 密码
remove
shell 用户登录后使用的shell
system 创建一个系统用户
uid 用来指定用户的ID
state 状态
ansible db -m user -a 'name=lisa uid=4000 home=/opt/lisa groups=root shell=/sbin/nologin'
#创建一个用户,指定用户的名字Lisa 端口号4000 家目录 附加组 shell操作为不可登录用户
ansible db -m user -a 'name=lisa state=absent' 删除指定用户,但会保留家目录
ansible db -m user -a 'name=lisa state=absent remove=yes' 删除指定用户 并移除家目录
---------------------------------------------------------------------------------
group模块:
gid 组的id
name 组的名字
system 系统组
state 状态
ansible db -m group -a 'name=lisa system=yes' 创建系统组
ansible db -m group -a 'name=lisa state=absent' 删除系统组