千家信息网

saltstack第三波《远程执行》

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,第3章 SaltStack远程执行3.1 目标(Targeting)指定目标,用来匹配minion,默认是以minion ID作为目标来匹配minion的。匹配目标,非常重要,因为匹配错了,执行命令错
千家信息网最后更新 2026年10月31日saltstack第三波《远程执行》

第3章 SaltStack远程执行

3.1 目标(Targeting)

指定目标,用来匹配minion,默认是以minion ID作为目标来匹配minion的。

匹配目标,非常重要,因为匹配错了,执行命令错了,后面会很严重的。

[root@saltstack-node1 ~]# salt '*' test.pingsaltstack-node2.example.com:    Truesaltstack-node1.example.com:    True

详解命令【salt '*' test.ping】如下:

r salt是固定的命令

r *是远程执行时的目标(代表匹配所有),是本节学习的重点

r test.ping代表要远程执行的模块

r test是模块的名称

r .(点)代表引用这个模块

r ping是test模块里的一个方法

3.1.1minion ID

这个minion ID是不能随便改动的,因为master端认证minion端时,默认是以minion ID的内容命名minion端的公钥。所以,如果修改minion ID后,该minion就不能被管理了,解决方法是,必须把这个minion删掉,再重新添加,认证,才可以管理。

注意:主机的FQDN名和minionID不要随便改!

~查看minionID

[root@saltstack-node1 ~]# cat /etc/salt/minion_id   #默认是主机的FQDN名saltstack-node1.example.com

~查看minion的公钥(即证书)

[root@saltstack-node1 ~]# ll/etc/salt/pki/master/minions总用量 8-rw-r--r-- 1 root root 451 8月   4 14:35saltstack-node1.example.com-rw-r--r-- 1 root root 451 8月   4 13:26saltstack-node2.example.com

3.1.2不同写法概述

3.1.2.1 与minion id有关

r globbing(通配符)

r regex(正则)

r list (列表)

范例:redis-node1-redis03-idc04-soa.example.com

r redis-node1:运行的服务是redis,这个是第一个节点

r redis03:说明这个redis是redis集群编号03里面的节点

r idc04:这台服务器运行在编号04的IDC机房中

r soa:这台服务器是给soa服务使用的

r example.com是域名

3.1.2.2 与minion id无关

r 子网/IP地址

r grains

r pillar

r compound matchers(复合匹配)

r node groups(节点组)

r batching execution(批处理执行)

3.1.3匹配目标的不同写法

3.1.3.1 通配符

r 任意字符

r ? 单个字符

r ! 取反

salt 'saltstack-node*' test.pingsalt '*.example.com' test.pingsalt 'saltstack-node?.example.com' test.pingsalt 'saltstack-node[1-2].example.com' test.pingsalt 'saltstack-node[!2].example.com' test.ping
3.1.3.2 列表(不推荐)
salt -L 'saltstack-node1.example.com,saltstack-node2.example.com' test.ping
3.1.3.3 正则※
salt -E 'saltstack-(node1|node2).example.com'test.ping

~正则表达式在top file里的写法

[root@saltstack-node1 ~]# cat/srv/salt/top.sls   base: 'saltstack-(node1|node2).example.com':    - match:pcre    #一定要加上这一行,声明使用正则匹配。    - apache
3.1.3.4 子网/IP地址
salt -S 10.0.0.0/24 test.pingsalt -S 10.0.0.22 test.ping
3.1.3.5 grains
salt -G 'os:CentOS' test.pingsalt -G cloud:openstack cmd.run 'df -h'# key(os、cloud)# value(CentOS、openstack)

~grains在top file里的写法

[root@saltstack-node1 ~]# cat /srv/salt/top.slsbase: 'saltstack-(node1|node2).example.com':    - match:pcre    - apache  'os:CentOS':    - match:grain   #一定要加上这一行,声明使用grain匹配,不加s    - apache
3.1.3.6 pillar
salt -I 'Zabbix_Server:10.0.0.22' test.ping
3.1.3.7 compound matchers(复合匹配)
salt -C 'saltstack-node1* orI@Zabbix_Server:10.0.0.22' test.pingsalt -C '* and not I@Zabbix_Server:10.0.0.22'test.ping#注意not参数的写法,前面一定要有target,才能用。
3.1.3.8 node groups(节点组)

可以在master的主配置文件里修改,指定好,大约在712行。很少用。

3.1.3.9 batching execution(分批处理执行)
salt '*' -b 1 test.ping#同一时刻只允许一台机器执行命令,很少用。

3.1.4salt命令参数列表

[root@saltstack-node1 ~]# salt -h-b  --batch   #允许一批机器,同一时刻执行命令,用来控制同时执行命令的机器数量-C, --compound  #混合-E, --pcre    #正则-L, --list    #列表-G, --grain    #grain-I, --pillar   #pillar-S, --ipcidr(IP无类域间路由)Subnet #子网或IP地址-R, --range    #范围

3.2 执行模块(Modules)

模块是远程执行中的重要组成部分。

在远程执行中的模块叫做执行模块(executionmodules),配置管理的模块称之为状态模块(executionmodules)。

我们学习执行模块时,必须要学会看官方文档,它的优点是全,缺点也是全,太丰富了。

官网(执行模块): https://docs.saltstack.com/en/latest/

模块的数量,至少有300加,而且数量还在不停的递增中……

接下来,我们一起来简单学习几个常用的模块。

注意:cmd.run这个模块,生产环境中,不建议使用,因为比较危险。

3.2.1network模块

模块由名称和方法组成。

注意,有些地方需要指定参数。

3.2.1.1 active_tcp

~返回minion端所有的TCP链接

salt 'saltstack-node1.example.com'network.active_tcp
3.2.1.2 arp

~Return the arp table from theminion

salt 'saltstack-node1.example.com' network.arp
3.2.1.3 default_route

~Return default route(s) fromrouting table

salt 'saltstack-node1.example.com'network.default_route
3.2.1.4 get_hostname

~Get hostname

salt '*' network.get_hostname
3.2.1.5 hw_addr

~Return the hardware address(a.k.a. MAC address) for a given interface

salt '*' network.hw_addr eth0
3.2.1.6 interface

~Return the inet address for agiven interface

salt '*' network.interface eth0
3.2.1.7 traceroute

~Performs a traceroute to a 3rdparty host

salt '*' network.traceroute baidu.com

3.2.2service模块

3.2.2.1 available

~Returns True if the specifiedservice is available, otherwise returns False.

salt '*' service.available sshd
3.2.2.2 get_all

~Return a list of all availableservices

salt 'saltstack-node1*' service.get_all
3.2.2.3 start

~Start the specified service

salt 'saltstack-node1*' service.start postfix
3.2.2.4 stop

~Stop the specified service

salt 'saltstack-node1*' service.stop postfix
3.2.2.5 status

~Return the status for aservice, returns the PID or an empty string if the service is running or not,pass a signature to use to find the service via ps

salt 'saltstack-node1*' service.status postfix

3.2.3 state模块

作用:Control the state system on the minion.

3.2.3.1 show_top

~Return the top data that theminion will use for a highstate

salt 'saltstack-node1*' state.show_top
3.2.3.2 show_highstate

~Retrieve the highstate datafrom the salt master and display it

salt 'saltstack-node1*' state.show_highstate
3.2.3.3 highstate

~Retrieve the state data fromthe salt master for this minion and execute it

salt '*' state.highstate
3.2.3.4 sls

~Execute the states in one ormore SLS files

salt '*' state.sls apache env=base

3.2.4控制cmd模块的方法

我们可以编辑master的主配置文件:/etc/salt/master

~ACL

client_acl:      #访问控制列表  larry:      #用户larry    -test.ping  #只能执行test模块的ping方法    -network.*  #只能执行network模块的所有方法


~黑名单


client_acl_blacklist:    #配置黑名单  users:         #所有的用户    - root       #用户root    -'^(?!sudo_).*$'  #所有非sudo用户  modules:        #模块关键字    - cmd       #cmd模块,里面的方法全部都不能用


~所有用户不能执行cmd模块的设置方法如下:

client_acl_blacklist:  modules:    - cmd

3.3 返回程序(Returnners)

如果salt minion太多的时候,每次查看执行结果都要看很久,而且屏幕都占满了。也不方便查看是否执行成功。这个时候saltsack的returner功能上场了。我们可以把执行的命令结果存入数据库,通过数据库查看就很方便了。

最大的作用,可以把所有的返回结果,统一存放在同个地方,做统计、分析时会比较好用。

默认情况下,返回程序是minion端将结果返回给master端。

我们可以自定义返回程序,将结果写入到redis或是MySQL。需要注意,返回结果是minion发送的,和master没有关系。也就是说,minion直接把结果写入到redis或MySQL中。

参考网址:

https://docs.saltstack.com/en/latest/ref/returners/index.html#full-list-of-returners

https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.mysql.html

3.3.1salt.returners.mysql(案例)

返回数据到mysql服务器上,注意:minion端依赖一个python包:python-mysqldb。

官网介绍:可以在master端或者minion端配置文件里面写上mysql相关的配置,如果是minion端,需要在每个minion的配置文件里面写,如果写到master端的配置文件,minion端则无需配置。因此,我们可以把这些配置写到master端的配置文件。

但是,我在做实验的时候,把相关配置写入到master的配置文件,minion端没写,结果发现mysql的表里是空的,没有记录。注:系统环境的版本是CentOSrelease 6.7 (Final)。

所以,为了防止出错,我们就把mysql的相关配置写入到所有minion的配置文件里。

mysql返回程序操作流程如下:

3.3.2安装mysql和依赖包

~master端

yum install -y mysql-server MySQL-python/etc/init.d/mysqld start

~所有minion端要安装:MySQL-python

如果不装,这个minion端的执行返回结果是不会写到mysql数据库表的。

yum install -y MySQL-python

3.3.3mysql的相关配置

因为要把客户端执行命令的结果直接返回给mysql服务器,所以客户端也要配置mysql信息的,在minion的配置文件中加入如下信息,你也可以把它单独写在一个文件中。为了方便管理推荐写在单独文件中:

~所有minion端都要配置

cat >/etc/salt/minion.d/mysql.conf<

~所有结点的minion服务都要重启

/etc/init.d/salt-minion restart

3.3.4创建salt的数据库和表结构

3.3.4.1 创建库
mysql---------------------------------CREATE DATABASE `salt`  DEFAULTCHARACTER SET utf8  DEFAULTCOLLATE utf8_general_ci;
3.3.4.2 创建三个表
use salt;# 在salt库里创建三张表---------------------------------CREATE TABLE `jids` (  `jid`varchar(255) NOT NULL,  `load`mediumtext NOT NULL,  UNIQUE KEY`jid` (`jid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE INDEX jid ON jids(jid) USING BTREE;---------------------------------CREATE TABLE `salt_returns` (  `fun`varchar(50) NOT NULL,  `jid`varchar(255) NOT NULL,  `return`mediumtext NOT NULL,  `id`varchar(255) NOT NULL,  `success`varchar(10) NOT NULL,  `full_ret`mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  KEY `id`(`id`),  KEY `jid`(`jid`),  KEY `fun`(`fun`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;


---------------------------------CREATE TABLE `salt_events` (`id` BIGINT NOT NULL AUTO_INCREMENT,`tag` varchar(255) NOT NULL,`data` mediumtext NOT NULL,`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,`master_id` varchar(255) NOT NULL,PRIMARY KEY (`id`),KEY `tag` (`tag`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;---------------------------------show tables;# 查看所有的表


3.3.4.3 授权
grant all on salt.* tosalt@'10.0.0.0/255.255.255.0' identified by 'salt';exit;

3.3.5验证

我们可以在master端打开两个窗口,一个看shell执行返回结果,一个看mysql中返回的结果。

返回程序把执行结果写入到mysql中,但是,返回程序无论写到哪里,master端都会显示执行结果。

3.3.5.1 shell

我们输入下面两条命令,将远程执行的结果,返回给mysql。

salt '*' test.ping --return mysqlsalt '*' cmd.run 'uptime' --return mysql

执行结果(命令行):

3.1.1.1 mysql

我们可以登录数据库,查看远程执行的结果是否已被保存在数据库的salt_returns表里。

mysqluse salt;show tables;select * from salt_returns;select * from salt_returns\G;# 倒数第二条命令,显示的结果,看的很混乱。# 最后一条命令,显示的结果,更加人性化。推荐!


执行命令:select *from salt_returns\G;

结果如下所示:

salt '*' cmd.run 'uptime' --returnmysql命令相对应的图:

salt '*' test.ping --return mysql命令相对应的图:

模块 结果 配置 命令 文件 方法 数据 服务 数据库 目标 程序 写法 正则 用户 服务器 端的 节点 管理 代表 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 凡科互联网科技 无线互联网科技 融势互联网科技 长亮科技互联网金融 新华互联网科技校企合作 衡水科技产业互联网平台 太原新华互联网科技学校怎么样 农村开互联网科技讲堂 互联网科技产品 哈尔滨新华互联网科技学院 中国互联网有什么科技含量 团飞科技与伯堂互联网服务平台 威龙国际互联网科技公司 烟台灵鸽互联网科技有限公司 广州千川互联网科技有限公司 产业互联网科技服务公司 陕西云淼互联网科技公司 福州德业互联网科技 科技互联网行业投资研究 互联网科技企业文化 互联网科技大会案例 哈尔滨秒房互联网科技有限公司 剑昆互联网络科技有限公司临桂 常德市电业局互联网科技部 互联网金融科技名词解释 广东工业互联网大赛深圳学泰科技 有人说阿里系是互联网科技企业 米泉互联网科技专业怎么样 玉溪新华互联网科技怎么选 陕西彩京云互联网科技有限公司
0