赞
踩
目录
或关系 #ansible "webservers:appservers" -m ping
逻辑与 #ansible "webservers:&dbservers" -m ping
逻辑非 #ansible 'all:!dbservers:!webservers' -m ping 有!号必须用单信号
综合逻辑 #ansible 'webservers:dbservers:&appservers:!ftpsrvs' -m ping
command 系统默认模块 允许后面加linux命令 -v越多越详细4顶
组合INVENTORY、API、MODULES、PLUGINS的绿框,为ansible命令工具,其为核心执行工具
黄色:成功执行并伴随着状态的改变
绿色:成功执行并且没有发生状态的改变
红色: 执行失败
ansible --version 可以看到主机清单文件的地方,以及版本型号等
[root@ubuntu2004 ~]#apt install ansible -y #下载安装
100为管理端
[root@ubuntu2004 ~]#vim /etc/ansible/ansible.cfg #主机清单文件
[root@ubuntu2004 ~]#vim /etc/ansible/hosts #在最下面加进去,就是你的客户端
生产中环境太多的话可以用Excet(WPS表格) 拉出来导进去
[webservers]
10.0.0.101
10.0.0.102[appservers]
10.0.0.[7:8]
10.0.0.101
ssh-keygen 生成本机密钥
[root@ubuntu2004 ~]#vim ssh_key.sh #把这个执行下 在执行下面脚本用来key链接认证
- #!/bin/bash
- #
- #********************************************************************
- #Author: wangxiaochun
- #QQ: 29308620
- #Date: 2022-09-27
- #FileName: ssh_key.sh
- #URL: http://www.wangxiaochun.com
- #Description: The test script
- #Copyright (C): 2022 All rights reserved
- #********************************************************************
- IPLIST="
- 10.0.0.8
- 10.0.0.7
- 10.0.0.101
- 10.0.0.102"
- #rpm -q sshpass &> /dev/null || yum -y install sshpass
- [ -f /root/.ssh/id_rsa ] || ssh-keygen -f /root/.ssh/id_rsa -P ''
- export SSHPASS=123456
- for IP in $IPLIST;do
- { sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $IP; } &
- done
- wait
[root@ubuntu2004 ~]#ssh 10.0.0.8
Last login: Tue Sep 27 09:32:26 2022 from 10.0.0.1
[root@rocky8 ~]#exit
logout
Connection to 10.0.0.8 closed.[root@ubuntu2004 ~]#ansible all --list-hosts #查看全部链接
hosts (4):
10.0.0.101
10.0.0.102
10.0.0.7
10.0.0.8
[root@ubuntu2004 ~]#ansible appservers --list-hosts #查看组链接
hosts (3):
10.0.0.7
10.0.0.8
10.0.0.101
nsible-doc nginx_status_info 详细查看模块作用
nsible-doc -s nginx_status_info 简要查看模块作用
Ansible Ad-Hoc 的执行方式的主要工具就是 ansible
特点: 一次性的执行,不会保存执行命令信息,只适合临时性或测试性的任务
格式:
ansible <host-pattern> [-m module_name] [-a args]
选项说明:
--version #显示版本
-m module #指定模块,默认为command
-v #详细过程 -vv -vvv更详细
--list-hosts #显示主机列表,可简写 --list
-C, --check #检查,并不执行
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-k, --ask-pass #提示输入ssh连接密码,默认Key验证
-u, --user=REMOTE_USER #执行远程执行的用户,默认root
-b, --become #代替旧版的sudo实现通过sudo机制实现提升权限
--become-user=USERNAME #指定sudo的runas用户,默认为root
-K, --ask-become-pass #提示输入sudo时的口令
-f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数
-i INVENTORY, --inventory INVENTORY #指定主机清单文件
测试 用密码验证链接只有一次机会
#以wang用户执行ping存活检测
ansible all -m ping -u wang -k
#以wang sudo至root执行ping存活检测
ansible all -m ping -u wang -k -b
#以wang sudo至mage用户执行ping存活检测
ansible all -m ping -u wang -k -b --become-user=mage
#以wang sudo至root用户执行ls
ansible all -m command -u wang -a 'ls /root' -b --become-user=root -k -K
#分别执行下面两条命令观察结果
[root@ansible ~]#ansible all -a 'sleep 5' -f1 #并发执行一台 可以再配置文件里forks更改
[root@ansible ~]#ansible all -a 'sleep 5' -f10 #并发执行10台 默认·为·5
[root@rocky8 ~]#vim /etc/sudoers
- ## Allow root to run any commands anywhere
- root ALL=(ALL) ALL
- wang ALL=(ALL) NOPASSWD: ALL
- ## Allows members of the 'sys' group to run networking, software,
- ## service management apps and more.
- # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
-
- ## Allows people in group wheel to run all commands
- %wheel ALL=(ALL) ALL
就是只属于dbservers的文件别的里面没有
ansible "webservers:dbservers" -m ping
ansible "~(web|db).*\.magedu\.com" -m ping
案例
- [root@ubuntu2004 ~]#ansible "10.0.0.*" -m ping
- 10.0.0.8 | SUCCESS => {
- "ansible_facts": {
- "discovered_interpreter_python": "/usr/libexec/platform-python"
- },
- "changed": false,
- "ping": "pong"
- }
- 10.0.0.7 | SUCCESS => {
- "ansible_facts": {
- "discovered_interpreter_python": "/usr/bin/python"
- },
- "changed": false,
- "ping": "pong"
相关命令都是以python为执行的。第一步就是把python程序命令拷到远程主机。在上面执行,执行完自己删除 在隐藏文件夹 ls -a .ansible/tmp/下
功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可以用shell模块实现
注意:此模块不具有幂等性
linux命令仅支持单个
chdir=dir #执行命令前,先切换至目录dir
creates=file #当file不存在时才会执行
removes=file #当file存在时才会执行
[root@ubuntu2004 ~]#ansible all -a 'pwd' #-a 后面加命令 command默认可不写
10.0.0.7 | CHANGED | rc=0 >>
/root
10.0.0.8 | CHANGED | rc=0 >>
/root
10.0.0.102 | CHANGED | rc=0 >>
/root
10.0.0.101 | CHANGED | rc=0 >>
/root
[root@ubuntu2004 ~]#ansible webservers -a 'chdir=/tmp pwd' #chdir(改文件夹)改到tmp下执行 不能cd或短路与
10.0.0.102 | CHANGED | rc=0 >>
/tmp
10.0.0.101 | CHANGED | rc=0 >>
/tmp
不修改默认注释,手动-m ,修改完则是默认
[root@ubuntu2004 ~]#ansible webservers -m shell -a 'chdir=/tmp pwd
[root@ubuntu2004 ~]#ansible webservers -m shell -a 'echo hehe:123456|chpasswd' 默认
shell:
cmd: rpm -qa nginx | wc -l #cmd输出命令
vim /etc/ansible/ansible.cfg #改后就是默认shell了
#log_path = /var/log/ansible.log
# default module name for /usr/bin/ansible
module_name = shell #把注释的这行去掉注释,给成shell# use this shell for commands executed under sudo
114,20 22%
提示符格式
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$
root@ansible ~]#ansible-console 连进来
Welcome to the ansible console.
Type help or ? to list commands.
root@all (3)[f:5]$ ping ping所有
10.0.0.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.6 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
10.0.0.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
root@all (3)[f:5]$ list 查看
10.0.0.8
10.0.0.7
10.0.0.6root@all (3)[f:5]$ cd webservers 切换
root@webservers (2)[f:5]$ list
10.0.0.7
10.0.0.8
root@webservers (2)[f:5]$ forks 10 切换10并发
root@webservers (2)[f:10]$ cd appservers
root@appservers (2)[f:5]$ yum name=httpd state=present
root@appservers (2)[f:5]$ service name=httpd state=started
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。