salt stack 远程命令

salt stack是一种自动化的运维工具,可以同时对N台服务器进行配置管理、远程命令执行等操作。

salt stack分为两个部分

salt-master,部署在控制服务器上,用于发出运维指令;
salt-minion,部署在所有需要批量运维的线上服务器上;

salt安装

服务端:yum install salt-master -y
客户端:yum install salt-minion -y

配置文件

服务端:/etc/salt/master

服务端配置:

interface: 192.168.1.229
auto_accept: True

其中,interface 用于设置master监听的IP地址;

auto_accept设置是否自动接收minion的KEY。

master启动后默认监听4505和4506两个端口:4505(publish_port)为salt的消息发布系统;4506(ret_port)为salt客户端与服务端通信的端口。

客户端:/etc/salt/minion

客户端配置:

master: 192.168.1.229
id :34

其中,master设置服务端地址;

id用于设置minion自身的ID,master根据这个ID识别minion;

启动服务

服务端启动方式:service salt-master start
客户端启动方式:service salt-minion start

程序日志:(有问题可查日志获取出错信息)

服务端:/var/log/salt/master
客户端:/var/log/salt/minion

key管理

1、minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和minion.pub(public key),然后将minion.pub发送给master;
2、master 在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了。

Salt在master和minion数据交换过程中使用AES加密, 为了保证发送给minion的指令不会被篡改,在发送命令到minion之前,minion的key需要先被master所接受(accepted),运行salt-key可以列出当前key的状态:

[root@localhost src]# salt-key -L
Accepted Keys:
34
35
37
39
56
57
Unaccepted Keys:
Rejected Keys:

salt-key命令可以接受特定的单个key或批量接受key,使用-A选项接受当前所有的key,接受单个key可以使用-a keyname。
认证命令为salt-key,常用的有如下命令

-a ACCEPT, --accept=ACCEPTAccept the following key
-A, --accept-all Accept all pending keys
-r REJECT, --reject=REJECTReject the specified public key
-R, --reject-all Reject all pending keys
-d DELETE, --delete=DELETEDelete the named key
-D, --delete-all Delete all keys

当然salt也是可以自动认证的,把下面的False改成True就OK了:

grep  -n "auto_accept:" /etc/salt/master

执行命令

salt 命令的格式

salt <target> <function> <args>

这里target是指minion的id,function是要执行的功能函数,args是函数参数。例如:

salt '*' cmd.run 'ls /home/'
salt '*' cmd.exec_code bash 'for i in {1,2};do echo $i;done'
salt '*' service.restart salt-minion

对所有的minion执行命令:

salt '*' cmd.run 'uptime'

输出结果:

34:
18:13:18 up 268 days, 6:04, 3 users, load average: 0.73, 0.87, 0.88
37:
18:13:18 up 142 days, 16:51, 1 user, load average: 0.47, 0.50, 0.46
39:
18:13:17 up 142 days, 16:49, 3 users, load average: 0.60, 0.59, 0.51
35:
18:13:17 up 268 days, 6:03, 1 user, load average: 1.11, 0.97, 0.87
57:
18:13:18 up 149 days, 2:30, 1 user, load average: 1.54, 1.62, 1.55
56:
18:13:17 up 149 days, 2:31, 0 users, load average: 1.50, 1.59, 1.51

-L选项指定minion列表:

salt -L '35,56' cmd.run 'uptime' 

-E选项使用正则匹配指定minion列表:

salt -E '^3' cmd.run 'uptime'

-N选项指定一个分组:

salt -N group2 test.ping

这里的test.ping命令和ICMP的ping没有关系。

注意:服务器分组需要事先在配置文件(/etc/salt/master)添加。

这里可以查看到salt支持的所有模块提供的功能列表:

salt '*' -d cmd

比如:

1、disk模块,查看磁盘使用率

salt '*' disk.usage
salt '*' disk.percent /var
salt '*' disk.inodeusage

2、dig模块

salt ns1 dig.A www.google.com
salt ns1 dig.AAAA www.google.com
salt ns1 dig.MX google.com
salt ns1 dig.NS google.com
salt ns1 dig.SPF google.com
salt ns1 dig.check_ip 127.0.0.1

3、pkg模块,用于批量安装minion服务器

salt '*' pkg.install <package name>
salt '*' pkg.upgrade 

注意:不同的linux发行版本,采用的包管理方式不一样,例如Ubuntu使用apt,CentOS使用yum等,因此该模块有不同的实现;

4、cron模块,管理集群的crontab

salt '*' cron.ls root
salt '*' cron.raw_cron root
salt '*' cron.rm_job root /usr/local/weekly
salt '*' cron.rm_env root MAILTO
salt '*' cron.set_job root '*' '*' '*' '*' 1 /usr/local/weekly
salt '*' cron.write_cron_file root /tmp/new_cron

5、at模块,一次性任务

salt '*' at.at 12:05am '/sbin/reboot' tag=reboot
salt '*' at.at '3:05am +3 days' 'bin/myscript' tag=nightly runas=jim
salt '*' at.atq
salt '*' at.atrm all

6、service模块

salt '*' service.available sshd
salt '*' service.get_all
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> [service signature]

7、cmd模块

salt '*' cmd.run "ls -l | awk '/foo/{print \$2}'"
salt '*' cmd.exec_code python2 'print("hello world")'
salt '*' cmd.script salt://scripts/runme.sh 'arg1 arg2 "arg 3"'

cmd模块可以执行一段代码、也可以执行一个指定脚本;

8、nginx模块,批量操作nginx服务器

salt '*' nginx.configtest
salt '*' nginx.signal reload
salt '*' nginx.status
salt '*' nginx.version

类似的,salt还支持对

apache

mysql

redis

rabbit

nagios

django

hadoop

haproxy

rsync

varnish

svn

等模块的支持。

 参考文档:

http://docs.saltstack.com/en/latest/topics/tutorials/walkthrough.html

salt stack 远程命令的更多相关文章

  1. salt stack 工具之一——远程命令

    salt stack 远程命令 salt stack是一种自动化的运维工具,可以同时对N台服务器进行配置管理.远程命令执行等操作. salt stack分为两个部分: salt-master,部署在控 ...

  2. Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET

    OSNIT_百度百科 Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET Salt Stack 官方文档翻译 分类: 自动运维 2013-04-02 11 ...

  3. 七天学会 SALT STACK 自动化运维 (1)

    七天学会 SALT STACK 自动化运维 (1) 简单理解 SALTSTACK 安装与配置 基本的使用方法 结束语 引用资源 简单理解 SALT STACK 笔者是初次接触 自动化运维 这一技术领域 ...

  4. Cisco Smart Install远程命令执行漏洞

    0x01前言 在Smart Install Client代码中发现了基于堆栈的缓冲区溢出漏洞,该漏洞攻击者无需身份验证登录即可远程执行任意代码.cisco Smart Install是一种“即插即用” ...

  5. saltstack执行远程命令

    目录 Remote Execution salt state salt state 系统 salt state 系统流程 Runner salt runner Orchestrate Runner S ...

  6. 【漏洞预警】SaltStack远程命令执行漏洞 /tmp/salt-minions

    前言:   2020年5月3日,阿里云应急响应中心监测到近日国外某安全团队披露了SaltStack存在认证绕过致命令执行漏洞以及目录遍历漏洞.在多个微信群和QQ群已经有群友反映中招,请马上修复. 以下 ...

  7. salt stack安装与使用

    SaltStack除了传统的C/S架构外,其实还有Masterless架构,如果采用Masterless架构,我不需要单独安装一台SaltStack Master机器,只需要在每台机器上安装Minio ...

  8. salt stack学习笔记

    saltstack运行模式: local master/minion salt ssh saltstack三大功能 远程执行命令 配置管理(状态管理) 云管理 安装: master  salt-mas ...

  9. "Java 反序列化"过程远程命令执行漏洞

    一.漏洞描述   国外 FoxGlove 安全研究团队于2015年11月06日在其博客上公开了一篇关于常见 Java 应用如何利用反序列化操作进行远程命令执行的文章.原博文所提到的 Java 应用都使 ...

随机推荐

  1. 正则表达式中\b和\s有什么区别

    字符串:abcsdsadas abc asdsadasdabcasdsa使用\sabc\s和\babc\b都能匹配中间的abc,这种方法不是重复了么,/s是匹配空格回车等得,/b网上教程说得不清楚什么 ...

  2. WebApi关于配置全局返回Json数据格式时间以及命名小写

    1.直接在Global文件中配置: 1 var formatters = GlobalConfiguration.Configuration.Formatters; 2 var jsonFormatt ...

  3. Django 一对一,一对多,多对多 操作、常用方法

    几对几的模型结构的使用场景为:一般根据业务需求,同一业务,需要向相关联的多表插入删除数据时,会用到. 一对一: 创建一个用户表 class Users(models.Model): username ...

  4. U盘自动拷贝

    描述:启动该程序后,自动检测U盘是否存在,若存在,将U盘中所有的文件拷贝到电脑的指定目录下. 注:本篇博文仅支持技术讨论,不用于数据的盗取之类的黑科技. 本程序基于Win32开发,主要是利用Win32 ...

  5. datatable的点击事件

    datatable的点击事件 在项目中遇到一个问题,在动态绑定到datatables上的数组,要是用table中的两个某一行中数据作为参数,通过鼠标点击进行获取,查阅官方文档得以解决: //首先定义一 ...

  6. 【Hadoop UI学习】Hue

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 zookeeper-3.4.11 Hue是一个开源的Apac ...

  7. hi3516a arm-hisiv300-linux-gcc jrtplib交叉编译

    1.进入JThread-1.2.1文件夹 2../configure --prefix=/home/suxuandong/Documents/qth264/hi3516/jrtpjthreadhisi ...

  8. python中从键盘输入内容的方法raw_input()和input()的区别

    raw_input()输出结果都是字符串 Input()输入什么内容,输出就是什么内容

  9. 解读 JavaScript 之引擎、运行时和堆栈调用

    https://www.oschina.net/translate/how-does-javascript-actually-work-part-1 随着 JavaScript 变得越来越流行,很多团 ...

  10. 转:[C# 开发技巧]如何防止程序多次运行

    转载自:http://www.cnblogs.com/zhili/p/OnlyInstance.html 一.引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://soc ...