Ansible安装

master
[root@master ~]# cat /etc/hosts
192.168.1.10 master
192.168.1.11 node11
192.168.1.12 node12
 
node11
[root@node11 ~]# cat /etc/hosts
192.168.1.10 master
192.168.1.11 node11
192.168.1.12 node12
 
node12
[root@node12 ~]# cat /etc/hosts
192.168.1.10 master
192.168.1.11 node11
192.168.1.12 node12
 
1.在master上下载ansible源文件,安装ansible。
# cd /etc/yum.repos.d/
# wget http://mirrors.aliyun.com/repo/epel-7.repo
# yum clean all
# yum makecache
# yum install ansible -y 安装ansible
 
# yum list all "*ansible*" 查看ansible安装包
# yum info ansible 查看ansible安装信息
# ls
ansible.cfg hosts roles
# cat /etc/ansible/ansible.cfg ansible配置文件
# cat /etc/ansible/hosts Inventory主机文件
 
2.主节点master和分节点node11、node12分别同步时间,然后建立SSH互信。
# ntpdate ip 同步本地服务器时间
# ntpdate time.nist.gov 同步网络服务器时间
 
  • master在本地生成公钥并复制到远程主机,从而不需要用户名和你们实现通信。
# ssh-keygen -t rsa 在master端生成rsa的公钥和私钥
# ls /root/.ssh/
id_rsa id_rsa.pub
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.11 将master端公钥复制到node11上
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.12 将master端公钥复制到node12上
如果SSH默认端口不是22,而是222,则:
# ssh-copy-id -i /root/.ssh/id_rsa.pub "-p 222 root@192.168.1.11"
# ssh-copy-id -i /root/.ssh/id_rsa.pub "-p 222 root@192.168.1.12"
 
  • 然后分别在远程主机上查看authorized_keys文件是否和master端的公钥文件一样,并从master上登录node11和node12,这时不需要密码直接登录成功说明已经建立SSH互信。
# cat /root/.ssh/id_rsa.pub master上查看公钥
# cat /root/.ssh/authorized_keys node11上查看公钥
# cat /root/.ssh/authorized_keys node12上查看公钥
 
# ssh 192.168.1.11 master上登录node11
# ssh 192.168.1.12 master上登录node12
# ssh root@192.168.1.11 'date' master上查看node11的时间
# ssh root@192.168.1.12 'date' master上查看node12的时间
 
3.主节点master上常用操作。
# man ansible-doc 查看ansible文档
# ansible-doc -l 查看ansible支持的所有模块
# ansible-doc -s cron 单独查看cron模块
# ansible-playbook --syntax-check site.yml 检查site.yml语法
# ansible-playbook -C site.yml
 
# ansible [-f forks] [-m module_name] [-a args] ansible格式
host-pattern 主机名或组
-f forks 启动的并发线程数
-m module_name 模块名
-a args 模块参数
 
# vim /etc/ansible/hosts ansible主机文件
能识别域名,主机IP地址,和主机组(可以用中括号定义多个主机组)
www.baidu.com 域名
192.168.1.11 IP地址
[web] 主机组
192.168.1.11
192.168.1.12
 
在主机文件里添加主机后才能远程操作其他机器
 
4.主节点master上常用模块。
  • ping模块,测试连通性。
# ansible web -m ping
 
  • command常用命令模块。
# ansible 192.168.1.11 -m command -a "date" 查看单个远程主机时间
# ansible web -m command -a "date" 查看web组远程主机时间
# ansible all -m command -a "date" 查看所有远程主机时间
# ansible all -m command -a "tail -2 /etc/passwd" 查看所有远程主机密码文件最后两行
其中【-m command】可以省略,直接# ansible all -a "date"
 
  • cron制定计划任务模块。
state:
present:安装,必须要提供的
absent:移除
# ansible web -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron"'
在web组上远程写入计划任务,每十分钟输出一次"hello",任务名是test cron。
 
# ansible web -m cron -a 'minute="*/10" job="/bin/echo hello" name="test cron" state=absent'
撤销远程主机web组上任务名是test cron的计划任务。
 
# ansible web -a "crontab -l"
查看计划任务结果。
 
  • user管理用户帐号模块。
 
# ansible web -m user -a 'name="user1"' 给web组添加用户user1
# ansible web -m command -a 'tail -2 /etc/passwd' 查看web用户添加结果
# ansible web -m user -a 'name="user1" state=absent' 撤销添加用户
 
  • group管理组模块。
建立用户mysqltest并添加到新建的groupmysql组里
# ansible web -m group -a 'name="groupmysql" gid=306 system=yes'
# ansible web -m user -a 'name="mysqltest" uid=306 system=yes group=groupmysql'
# ansible web -m command -a 'tail -3 /etc/group'
 
  • copy复制模块。
复制master端/etc/fstab到远程节点的/tmp下并改名为fstab.ansible
# ansible web -m copy -a 'src=/etc/fstab dest=/tmp/fatab.ansible owner=root mode=640'
src:源地址
dest:目标地址
 
远程新建文件并输入内容
# ansible web -m copy -a 'content="hello ansible\nhi how are you?\n" dest=/srv/ansible_test.txt'
content:新增内容
 
  • file设置文本属性模块。
# ansible web -m file -a 'owner=mysqltest group=mysqlgroup mode=644 path=/srv/ansible_test.txt'
设置远程主机上的ansible_test.txt文件的所有者,所有组以及权限。这里path可以换成name或dest。
 
# ansible web -m file -a 'path=/home/ansible_test.link src=/srv/ansible_test.txt state=link'
在远程主机的/home目录下做一个软链接,指向/srv/ansible_test.txt
 
  • service管理服务模块。
# ss -tnl 查看服务是否启用
# ansible web -m command -a 'chkconfig --list postfix'
查看开机启动项
# ansible web -m service -a 'enabled=true name=postfix state=started'
远程设置postfix开机启动,并启动服务
 
enabled:true或false
state:started,stopped,restarted
 
  • shell执行远程主机命令模块。
# ansible web -m shell -a 'echo "123456" | passwd --stdin mysqltest'
这里使用shell模块能忽略管道符等特殊字符命令,command模块则不行
 
  • script将本地脚本复制到远程主机执行
[root@master tmp]# cat test.sh 远程追加,文件必须存在
#!/bin/bash
echo "hello rzt" >> /srv/ansible_test.txt
 
# ansible web -m script -a 'test.sh' 在脚本所在目录执行【相对路径】
 
  • yum模块安装程序包
# ansible web -m yum -a 'name=zsh state=installed' 安装zsh
# ansible web -m yum -a 'name=zsh state=absent' 卸载zsh
 
  • setup收集远程主机信息
# ansible web -m setup | grep ansible_processor
# ansible all -m setup | grep ansible_fqdn 获取主机名
# ansible all -m setup | grep "address"
================================================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2025-07-28 10:57  榆812  阅读(5)  评论(0)    收藏  举报