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 :

其中,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: 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'

输出结果:

:
:: up days, :, users, load average: 0.73, 0.87, 0.88
:
:: up days, :, user, load average: 0.47, 0.50, 0.46
:
:: up days, :, users, load average: 0.60, 0.59, 0.51
:
:: up days, :, user, load average: 1.11, 0.97, 0.87
:
:: up days, :, user, load average: 1.54, 1.62, 1.55
:
:: up days, :, 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 '*' '*' '*' '*' /usr/local/weekly
salt '*' cron.write_cron_file root /tmp/new_cron

5、at模块,一次性任务

salt '*' at.at :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. jenkins远程命令执行利用工具

    昨天看小飞侠写的py的jenkins的脚本,昨天晚上在微信里评论今天写一个JAVA的GUI的tools. 早上花了点时间写一下: code: package com.tools; import jav ...

  3. Linux批量远程命令和上传下载工具

    https://github.com/eyjian/mooon/releases/tag/mooon-tools mooon_ssh:批量远程命令工具,在多台机器上执行指定命令 mooon_uploa ...

  4. 深入理解 DeepSea 和 Salt 部署工具 - Storage6

    学习 SUSE Storage 系列文章 (1)SUSE Storage6 实验环境搭建详细步骤 - Win10 + VMware WorkStation (2)SUSE Linux Enterpri ...

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

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

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

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

  7. 十、jdk工具之Jdb命令(The Java Debugger)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

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

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

  9. Windows系统自带工具的 cmd 命令

    目标 与计算机高手无关,只是为了减少鼠标点击的次数,提高效率. 适用范围 Windows XP,Windows 7,Window 8 (在Windows 7 下验证通过.) 使用方法 在 “运行“ 对 ...

随机推荐

  1. Jetty应用服务器的安装详解

    Jetty是一个开源的Servlet容器和应用服务器,它极度轻量级.高便携性.功能强大.灵活和扩展性好,而且支持各种技术如SPDY.WebSocket.OSGi.JMX.JNDI和JAAS.Jetty ...

  2. hdu2665 && poj2104划分树

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 47066   Accepted: 15743 Ca ...

  3. 【CodeForces 589F】Gourmet and Banquet(二分+贪心或网络流)

    F. Gourmet and Banquet time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  4. JSP导入EXCEL样式

    http://demo.gcpowertools.com.cn/spreadjs/exceliosample/exceliosample/ Java实现导入Excel: 1.做一个jsp页面,页面包括 ...

  5. 网络爬虫2--PHP/CURL库(client URL Request Library)

    PHP/CURL库功能   多种传输协议.CURL(client URL Request Library),含义是“客户端URL请求库”. 不像上一篇所用的PHP内置网络函数,PHP/CURL支持多种 ...

  6. css 数字出现滚动条解决

    <div style="height:100px;overflow-y:auto;word-wrap:break-word;word-break:break-all;" ng ...

  7. wpf配置菜单栏

    WPF 内建了两种菜单——Menu 和ContextMenu(上下文菜单). 1. Menu Menu 的项可以是任何东西,但是你应该使用MenuItem 以及Separator 对象. <Me ...

  8. Xcopy命令参数

    XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件:使用时源盘符.源目标路径名.源文件名至少指定一个:选用/S时对源目录下及其子目录下的所有文件进行COPY.除非 ...

  9. Android程序设计-简单手机通讯录

    在微信中,手机QQ中你会发现软件读取手机通讯录这个功能,这个功能使得软件更好的与手机联系人绑定,从而达到分享,拨打电话,读取用户信息等操作.下面我们将通过一个demo实现这个功能 首先我们看一下效果图 ...

  10. Bzoj2683 简单题

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...