返回顶部
首页 > 资讯 > 数据库 >saltstack第三波《远程执行》
  • 483
分享到

saltstack第三波《远程执行》

2024-04-02 19:04:59 483人浏览 薄情痞子
摘要

第3章 SaltStack远程执行3.1 目标(Targeting)指定目标,用来匹配miNIOn,默认是以minion ID作为目标来匹配minion的。匹配目标,非常重要,因为匹配错了,执行命令错了,后

第3章 SaltStack远程执行

3.1 目标(Targeting)

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

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

 

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

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

r salt是固定的命令

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

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

r test是模块的名称

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

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

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.ping
salt '*.example.com' test.ping
salt 'saltstack-node?.example.com' test.ping
salt 'saltstack-node[1-2].example.com' test.ping
salt '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.ping
salt -S 10.0.0.22 test.ping
3.1.3.5 grains
salt -G 'os:Centos' test.ping
salt -G cloud:openstack cmd.run 'df -h'
# key(os、cloud)
# value(CentOS、openstack)

~grains在top file里的写法

[root@saltstack-node1 ~]# cat /srv/salt/top.sls
base:
 '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.ping
salt -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<<EOF
######      Returner settings        ######
############################################
# Whichreturner(s) will be used for minion's result:
#return: mysql
mysql.host:'10.0.0.21'
mysql.user:'salt'
mysql.pass:'salt'
mysql.db:'salt'
mysql.port:3306
EOF
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 mysql
salt '*' cmd.run 'uptime' --return mysql

 

执行结果(命令行):

 saltstack第三波《远程执行》

3.1.1.1 mysql

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

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

 

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

结果如下所示:

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

saltstack第三波《远程执行》

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

saltstack第三波《远程执行》

您可能感兴趣的文档:

--结束END--

本文标题: saltstack第三波《远程执行》

本文链接: https://lsjlt.com/news/37043.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • saltstack第三波《远程执行》
    第3章 SaltStack远程执行3.1 目标(Targeting)指定目标,用来匹配minion,默认是以minion ID作为目标来匹配minion的。匹配目标,非常重要,因为匹配错了,执行命令错了,后...
    99+
    2024-04-02
  • Saltstack远程执行命令(3)
        Saltstack的一个比较突出的优势是具备执行远程命令的功能,可以帮助运维人员完成集中化的操作平台(批量执行服务器命令)命令格式:salt '<操作目标>' <方法>[参数]实例:查看minion主机的内存...
    99+
    2023-01-31
    命令 Saltstack
  • SaltStack实战之远程执行-Returners
    SaltStack实战之远程执行-Returners学习 SaltStackSaltStack实战之远程执行-Returners1. Returners列表2. 介绍mysql returner的...
    99+
    2024-04-02
  • Saltstack远程执行命令怎么用
    这篇文章给大家分享的是有关Saltstack远程执行命令怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。命令命令格式:salt '<操作目标>' <方法&...
    99+
    2023-06-05
  • NodeJS远程代码执行
    背景 @Artsploit在挖PayPal的漏洞时,发现一处NodeJS代码执行,奖励$10000美金。 测试 var express = require('express'); var app = ...
    99+
    2022-06-04
    代码 NodeJS
  • Python ssh 远程执行shell
    python paramiko import paramiko ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ssh.set_missing_host_...
    99+
    2023-01-31
    Python ssh shell
  • python远程执行命令
    import paramiko def sshclient_execmd(hostname, port, username, password, execmd):     paramiko.util.log_to_file("paramik...
    99+
    2023-01-31
    命令 python
  • 执行go vendor第三方包版本冲突问题解决
    目录问题症状排查经过解决办法总结和其他问题症状 我们使用 jenkins 脚本执行 go build ,用来构建线上服务器使用的二进制文件。构建过程中有这样一个步骤: go mod ...
    99+
    2024-04-02
  • 关于SSH 远程执行命令你要知道的二三事
    前言 相信大家在工作的时侯,可能会遇到要利用 ssh 在本地执行远程机器的命令可以便捷地处理某些重复工作,我们希望做到: 免手工输入密码 支持执行多个命令,执行 shell 脚本 支持执行 s...
    99+
    2022-06-04
    你要 二三 命令
  • python 远程执行代码 para
    installtion:    yum -y install python-devel    pip install paramiko    problem:    1.1 error: command ‘gcc’ failed with ...
    99+
    2023-01-31
    代码 python para
  • python 远程执行代码 fabr
     fabric应用:               1、fab -H 172.23.177.40,172.23.177.41 host_type               2、fab host_type check_ver         ...
    99+
    2023-01-31
    代码 python fabr
  • 如何进行JMeter配置远程执行
    如何进行JMeter配置远程执行,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在对容器技术相关的各个组件进行压力测试时,我们选用JMeter作为压测工具,分别对...
    99+
    2023-06-19
  • XAMPP远程命令执行漏洞
    漏洞描述: XAMPP v1.8.1 版本中存在安全漏洞,该漏洞源于程序没有正确限制对xampp/lang.php文件的访问。远程攻击者可通过‘WriteIntoLocalDisk’方法利用该漏洞修改xampp/lang.tmp文件,实施跨...
    99+
    2023-09-09
    php 安全 web安全
  • Python远程linux执行命令实现
    1、远程登录到linux上,使用到的模块paramiko #远程登陆操作系统 def ssh(sys_ip,username,password,cmds): try #创建ssh客户端 clien...
    99+
    2022-06-04
    Python远程linux执行命令 Python linux远程命令
  • Discuz! 7.1 远程代码执行漏洞
    截稿至此时,黑客X档案等一些使用discuz!最新版的论坛已被攻击进而无法访问。 首先说一下,漏洞是t00ls核心群传出去的,xhming先去读的,然后我后来读的,读出来的都是代码执行,1月5日夜里11点多钟,在核心群的...
    99+
    2022-06-12
    Discuz 远程代码执行
  • JSch怎么远程执行Shell命令
    这篇文章主要介绍了JSch怎么远程执行Shell命令,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JS是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其解释...
    99+
    2023-06-14
  • java怎么远程执行linux命令
    可以使用Java中的ProcessBuilder类来远程执行Linux命令。下面是一个简单的示例代码:```javaimport j...
    99+
    2023-09-29
    java linux
  • jenkins远程执行shell怎么实现
    要实现Jenkins远程执行Shell脚本,你可以按照以下步骤操作: 确保Jenkins服务器和目标服务器已经建立了SSH连接。...
    99+
    2023-10-25
    jenkins shell
  • Windows命令远程执行工具Winexe
    Windows命令远程执行工具Winexe...
    99+
    2023-06-04
  • JavaJSch远程执行Shell命令的方法
    目录背景JSch简介使用示例需要注意的点参考文档背景 项目需求,需要远程 ssh 登录到某个节点执行 shell 命令来完成任务。对于这种需求,如果不用 java 程序,直接 lin...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作