- 轻量级,更新时,只需要在操作机上进行一次更新即可;
- 采用SSH协议;
- 不需要去客户端安装agent;
- 批量任务执行可以写成脚本,而且不用分发到远程端就可以执行;
- 使用python编写的,维护更简单;
- 支持sudo普通用户命令;
- 去中心化管理。
#在管理端(ansible宿主机|服务端)生成公钥和私钥; ssh-keygen (一直回车) #生成的公钥和私钥位置; /root/.ssh/id_rsa (私钥) /root/.ssh/id_rsa.pub (公钥) #将生成的公钥拷贝至远程客户端; ssh-copy-id -i /root/.ssh/rsa.pub 192.168.1.X 将id_ras.pub文件内容拷贝客户端该文件中:/root/.ssh/authorized_keys #从服务端SSH登录客户端,第一次输入密码,第二次无需输入客户端密码:(如下图)
rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install epel-release -y yum install ansible -y
-v,–verbose # 打印详细模式; -i PATH,–inventory=PATH #指定host文件路径; -f NUM,–forks=NUM #指定fork开启同步进程的个数,默认5; -m NAME,–module-name=NAME #指定module名称,默认模块command; -a MODULE_ARGS #module模块的参数或者命令; -k,–ask-pass #输入远程被管理端密码; –sudo #基于sudo用户执行; -K,–ask-sudo-pass #提示输入sudo密码与sudo一起使用; -u USERNAME,–user=USERNAME #指定移动端的执行用户; -C,–check #测试执行过程,不改变真实内容,相当于预演; -T TIMEOUT, #执行命令超时时间,默认为10秒; --version #查看Ansible软件版本信息。
ping:
ansible最基础的模块为ping模块,主要用于判断远程客户端是否在线,用于ping本身服务器,返回值为changed、ping:
ansible -k all -m ping
command:
ansible commane模块为默认模块,主要用于执行Linux基础命令,可以执行远程服务器命令、任务执行等操作: 以下为command模块使用详解
chdir #执行命令前,切换到目录; creates #当该文件存在时,则不执行该步骤; executable #换用shell环境执行命令; free form #需要执行的脚本; removes #当该文件不存在时,则不执行该步骤; warm #如果在ansible.cfg中存在告警,如果设定了False,不会警告此行。
ansible -k -i /etc/ansible/hosts all -m command -a "date"
ansible command模块远程执行ping命令:
ansible -k all -m command -a "ping -c 1 www.baidu.com"
ansible command模块远程执行df -h命令:
ansible -k all -m command -a "df -h" ansible -k 192.168.1.1* -m command -a "df -h"
copy:
ansible copy模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能:
src #ansible端源文件或者目录,空文件夹不拷贝; content #用来替代src,用于将指定的文件的内容,拷贝到远程文件内; dest #客户端目标或者文件,需要绝对路径; backup #拷贝之前,先备份远程节点上的原始文件; directory mode #用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝; follow #支持link文件拷贝; fore #覆盖远程主机不一致的内容; group #设定远程主机文件夹的组名; mode #指定远程主机文件及文件的权限; owner #设定远程主机文件夹的用户名。
ansible -k all -m copy -a 'src=/etc/passwd dest=/tmp/ mode=755 owner=root'
ansible copy模块操作,content文件内容,dest目标文件,owner指定拥有者:
ansible -k all -m copy -a 'content="Hello World" dest=/tmp/jfedu.txt mode=755 owner=root'
ansible copy模块操作, content文件内容,dest目标文件。owner指定拥有者,backup=yes开始备份:
ansible -k all -m copy -a 'content="Hollo World" dest=/tmp/jfedu.txt backup=yes mode=755 owner=root'
yum:
ansible yum模块主要用于软件的安装、升级、卸载、支持红帽.rpm软件的管理:
con file #设定远程YUM执行时所依赖的YUM配置文件; disable gpg check #安装软件包之前是否坚持gpg key; name #需要安装的软件名称,支持软件组件安装; update cache #安装软件前更新缓存; enablerepo #指定repo源名称; skip broken #跳过异常软甲节点; state #软件包状态,包括:installed、present、latest、absent、removed.
ansible all -k -m yum -a "name=sysstat,screen stata=installed"
ansible yum模块操作,name表示需要安装的软件名称,state表示状态,常见state=installed表示安装软件,diable gpg check=no不检查key:
ansible all -k -m yum -a "name=sysstat,screen stata=diable gpg check=no"
file:
ansible file模块主要用于文件的创建、删除、修改、权限、属性的维护和管理:
src #ansible端源文件或者目录; follow #支持link文件拷贝; force #覆盖远程主机不一致的内容; group #设定远程主机文件夹的组名; mode #指定远程主机文件及文件夹的权限; owner #设定远程主机文件夹的用户名; path #目标路径,也可以用dest,name代替; state #状态包括:file、link、directory、hard、touch、absent; attributes #文件或者目录特殊属性。
ansible -k 192.168.* -m file -a "path=/tmp/`date _%F` state=dirctory mode=755"
ansible file模块操作, path表示目录的名称和路径,state=touch表示创建文件:
ansible -k 192.168.* -m file -a "path=/tmp/`date _%F` state=touch mode=755"
user:
ansible user模块主要用于操作系统用户、组、权限、密码等操作,user模块使用详解:
system #默认创建为普通用户,为yes则创建系统用户; append #添加一个新的组; commend #新增描述信息; createhome #给用户创建家目录; force #用于强制删除用户; group #创建用户主组; groups #将用户加入组或者附属组添加; home #指定用户的家目录; name #表示状态,是否create、remove、modify; password #指定用户的密码,此处为加密密码; remove #删除用户; shell #设置用户的shell登录环境; uid #设置用户id; update password #修改用户密码; state #用户状态,默认为present表示新建用户。
ansible -k 192.168.1.* -m user -a "name=precious home=/tmp/"
ansible user模块操作,name表示用户名称,home表示其家目录,shell表示启用的登录shell环境:
ansible -k 192.168.1.* -m user -a "name=precious home=/tmp/ shell=/sbin/nologin"
ansible user模块操作,name表示用户名称,state=absent表示删除用户,force表示强制删除:
ansible -k 192.168.1.* -m user -a "name=precious home=/tmp/ state=absent force=yes"
cron:
ansible cron模块主要用于添加、删除更新操作系统Crontab任务计划:
name #任务计划名称; cron file #替换客户端该用户的任务计划的文件; minute #分(0-59 , * , */2); hour #时(0-23 , * , */2); day #日(1-31 , * , */2); mouth #月(1-12 , * , */2); weekday #周(0-6 或 1-7 , * ); jod #任务计划执行的命令,state要等于present; backup #是否备份之前的任务计划; user #新建任务计划的用户; state #指定任务计划present、absent。
ansible -k all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for sync time' job='/usr/sbin/ntpdate 139.224.227.121'"
ansible cron模块操作,基于cron,创建crontab任务计划,backup=yes表示开始备份:
ansible -k all -m cron -a "minute=0 hour=0 day=* month=* weekday=* name='Ntpdate server for sync time' backup=yes job='/usr/sbin/ntpdate pool.ntp.org'"
ansible cron模块操作,基于cron,删除crontab任务计划:
ansible -k all -m cron -a "name='Ntpdate server for sync time' state=absent"
synchronize:
ansible synchronize模块主要用于目录、文件同步,基于rsync命令同步目录:
compress #开启压缩,默认为启用; archive #是否采用归档模式同步,保证源和目标文件属性一致; checksum #是否效验; dirs #以非递归的方式传输目录; links #同步链接文件; recursive #是否递归yes/no; rsync opts #使用rsync 的参数; copy links #同步的时候是否复制连接; dalete #删除源中没用而目标存在的文件; src #源目录及文件; dest #目标目录及文件; dest port #目标接收的端口; rsync path #服务的路径,指定rsync 命令来在远程服务器上运行; rsync timeout #指定rsync操作的IP超时时间; set remote user #设置远程用户名; --exclude=.log #忽略同步.log结尾的文件; mode #同步的模式,rsync同步的方式PUSH、PULL,默认都是推送push。
ansible all -m synchronize -a 'src=/tmp/ dast=/tmp/'
ansible synchronize模块操作,src源目录、dest目标目录、commpress=yes开启压缩、delete=yes数据一致、rsync_opts同步参数、--exclude排除文件:
ansible -k -m synchronize -a 'src=/tmp/ dest=/tmp/ compress=yes delete=yes rsync_opts=--no-motd,--exclude=.txt'
shell:
ansible shell模块主要用于远程客户端上执行各种shell命令或者运行脚本,远程执行命令通过/bin/sh环境来执行,支持比command更多的指令:
shdir #执行命令前,切换到目录; creates #当该文件存在时,则不执行该步骤; executable #换用shell环境执行命令; free form #需要执行的脚本; removes #当该文件不存在时,则不执行该步骤; warn #如果ansible.cfg中存在告警,如果设定了false,不会警告此行。
ansible -k all -m shell -a "/bin/sh /tmp/variables.sh >>/tmp/var.log"
ansible shell模块操作,远程执行创建目录命令,执行之前切换在/tmp/目录,屏蔽警告信息:
ansible -k all -m shell -a "mkdir -p `date +%F` chdir=/tmp/ state=directory warn=no"
ansible shell模块操作,远程客户端查看HTTP进程是否启动:
ansible -k all -m shell -a "ps -ef|grep http"
ansible shell模块操作,远程查看crontab任务计划:
ansible -k all -m shell -a "crontab -l"
service:
ansible service模块主要用于远程客户端各种服务管理,包括启动、停止、重启、重新加载等:
enabled #是否开启启动服务; name #服务名称; runlevel #服务启动级别; arguments #服务命令行参数传递; state #服务操作状态,状态包括started.stoped,restarted,reloaded。
ansible -k all -m service -a "name=httpd state=redtarted"
ansible service模块操作,远程重启网卡服务:
ansible -k all -m service -a "name=network args=ens33 state=restarted"
ansible service模块操作,远程开机启动nfs服务,设置3,5级别自动启动:
ansible -k all -m service -a "name=nfs enabled=yes runlevel=3,5"