Saltstack远程执行
1. Saltstack的远程执行概念
远程执行是Saltstack的核心功能之一。主要使用Salt模块批量给选定的minion端执行相应的命令,并获得返回结果。
举例1:如上文例子“判断Salt的minion是否存活?”
[root@master ~]# salt '*' test.ping master: True node01: True
salt:是saltstack自带的一个命令 * :表示目标主机,这里表示所有目标主机 test.ping:test是saltstack中的一个模块,ping则是这个模块下面的一个方法
举例:2:saltstack使用cmd.run模块远程执行shell命令
[root@master ~]# salt '*' cmd.run 'uptime' node01: 21:03:48 up 8 min, 1 user, load average: 0.00, 0.17, 0.16 master: 21:03:48 up 8 min, 1 user, load average: 0.20, 0.55, 0.36 [root@master ~]# salt 'node01' cmd.run 'uptime' node01: 21:04:01 up 8 min, 1 user, load average: 0.00, 0.16, 0.15
2.Salt命令的结构语法
目标主机target匹配方式:
- 与minionID有关的采用,通配符、列表和正则;
- 与minionID无关的采用,IP、复合、分组、Grains、Pillar
远程执行常用模块(点击所有模块列表):
- test 模块:用于测试
- user模块:用于用户管理
- cmd模块:用于执行任意shell命令
- pkg模块:用于软件包管理
- file模块:用于配置
- service模块:用于服务管理
3.Salt命令的目标主机target匹配方式
3.1 通配符匹配
[root@master ~]# salt '*' test.ping node01: True master: True [root@master ~]# salt 'master' test.ping master: True [root@master ~]# salt 'ma*' test.ping master: True [root@master ~]# salt 'node0[0|1]' test.ping node01: True [root@master ~]# salt 'node0[!0]' test.ping node01: True [root@master ~]# salt 'node0?' test.ping node01: True
3.2 列表匹配
[root@master ~]# salt -L 'master,node01' test.ping node01: True master: True
3.3 正则匹配
[root@master ~]# salt -E '^no.*' test.ping node01: True [root@master ~]# salt -E '^ma' test.ping master: True
3.4 IP匹配
[root@master ~]# salt -S '192.168.1.220' test.ping master: True [root@master ~]# salt -S '192.168.1.0/24' test.ping node01: True master: True
3.5 复合匹配
[root@master ~]# salt -C 'G@os:Centos and S@192.168.1.220' test.ping master: True [root@master ~]# salt -C 'G@os:Centos and S@192.168.1.221' test.ping node01: True
3.6 分组匹配
[root@master ~]# vi /etc/salt/master nodegroups: webserver: 'master,node01' dbserver: 'node02' #必须要有空格缩进。
[root@master ~]# systemctl restart salt-master [root@master ~]# salt -N 'webserver' test.ping node01: True master: True
3.7 Grains匹配
[root@master ~]# salt -G 'os:Centos' test.ping master: True node01: True [root@master ~]# salt -G 'localhost:master' test.ping master: True
4.Salt命令的远程执行常用模块
4.1 test模块
功能:用于测试。
[root@master ~]# salt '*' test.ping node01: True master: True
4.2 user模块
功能:详见官方。
salt '*' user.add name <uid> <gid> <groups> <home> <shell>
[root@master ~]# salt '*' user.add testuser node01: True master: True
4.3 cmd模块
功能:实现远程的命令行调用执行,可以使用shell所有命令(默认具备root操作权限,使用时需评估风险
[root@master ~]# salt '*' cmd.run 'free -m' master: total used free shared buff/cache available Mem: 972 544 271 7 157 262 Swap: 999 0 999 node01: total used free shared buff/cache available Mem: 972 168 650 7 154 641 Swap: 999 0 999
4.4 pkg模块
功能:软件包状态管理,会根据操作系统不同,选择对应的安装方式(如CentOS系统默认使用yum,Debian系统默认使用apt-get)
[root@master ~]# salt '*' pkg.install "vsftpd" #安装 [root@master ~]# salt '*' pkg.remove "vsftpd" #卸载 [root@master ~]# salt '*' pkg.latest_version "vsftpd" #安装最新版本 [root@master ~]# salt '*' pkg.upgrade "vsftpd" #更新软件包 [root@master ~]# salt '*' pkg #查看帮助手册
[root@master ~]# salt '*' pkg.install "vsftpd" node01: ---------- vsftpd: ---------- new: 3.0.2-25.el7 old: master: ---------- vsftpd: ---------- new: 3.0.2-25.el7 old:
4.5 file模块
功能:被控主机常见的文件操作,包括文件读写、权限、查找、校验。
#校验所有minion主机文件的加密信息,支持md5、sha1、sha224、shs256、sha384、sha512加密算法 [root@master ~]# salt '*' file.get_sum /etc/passwd md5 #修改所有minion主机/etc/passwd文件的属组、用户权限、等价于chown root:root /etc/passwd [root@master ~]]# salt '*' file.chown /etc/passwd root root #获取所有minion主机/etc/passwd的stats信息 [root@master ~]]# salt '*' file.stats /etc/passwd #获取所有minion主机/etc/passwd的权限mode,如755,644 [root@master ~]]# salt '*' file.get_mode /etc/passwd #修改所有minion主机/etc/passwd的权限mode为0644 [root@master ~]]# salt '*' file.set_mode /etc/passwd 0644 #在所有minion主机创建/opt/test目录 [root@master ~]]# salt '*' file.mkdir /opt/test #在所有minion主机穿件/tmp/test.conf文件 [root@master ~]]# salt '*' file.touch /tmp/test.conf #将所有minion主机/tmp/test.conf文件追加内容'maxclient 100' [root@master ~]]# salt '*' file.append /tmp/test.conf 'maxclient 100' #删除所有minion主机的/tmp/test.conf文件 [root@master ~]]# salt '*' file.remove /tmp/test.conf
4.6 service模块
功能:被控主机程序包服务管理.
#开启(enable)禁用(disable) salt '*' service.enable <service name> salt '*' service.disabled <service name> #reload、restart、start、stop、status操作 salt '*' service.reload <service name> salt '*' service.restart <service name> salt '*' service.start <service name> salt '*' service.stop <service name> salt '*' service.status <service name>
[root@master ~]# salt '*' service.disable vsftpd node01: True master: True [root@master ~]# salt '*' service.enable vsftpd node01: True master: True
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?