自动化运维之Saltstack

时间:2023-03-08 17:12:10
自动化运维之Saltstack

第三十八课 自动化运维之Saltstack

目录

一、自动化运维介绍

二、 saltstack安装

三、 启动saltstack服务

四、 saltstack配置认证

五、 saltstack远程执行命令

六、 grains

七、 pillar

八、 安装配置httpd

九、 配置管理文件

十、 配置管理目录

十一、 配置管理远程命令

十二、 配置管理计划任务

十三、 其他命令

十四、 salt-ssh使用

一、自动化运维介绍

认识自动化运维

传统运维效率低,大多工作人为完成

传统运维工作繁琐,容易出错

传统运维每日重复做相同的事情

传统运维没有标准化流程

传统运维的脚本繁多,不能方便管理

自动化运维就是要解决上面所有问题

常见自动化运维工具

Puppet (www.puppetlabs.com)基于ruby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。

Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

Ansible (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。

二、 saltstack安装

saltstack介绍

https://docs.saltstack.com/en/latest/topics/index.html

saltstack既可以使用salt-ssh远程执行,类似ansible,也支持c/s模式。

演示环境:

saltserver 192.168.1.41 CentOS release 6.8 (Final)

saltminion 192.168.1.43 CentOS release 6.8 (Final)

saltminion01 192.168.1.42 CentOS release 6.8 (Final)

三台机器都配置hosts

# vim /etc/hosts
// 添加
192.168.1.41 saltserver.local
1921.68.1.42 saltminion01.local
192.168.1.43 saltminion.local

Saltstack安装

1.安装epel-release源

// 也可以从http://repo.saltstack.com/yum/redhat/下载安装salt最新的源
[root@saltserver ~]# yum -y install epel-release

2.安装相应的salt包

// 查看salt安装包
[root@saltserver ~]# yum list | grep salt
python-salttesting.noarch 2015.7.10-1.el6 epel
salt.noarch 2015.5.10-2.el6 epel
salt-api.noarch 2015.5.10-2.el6 epel
salt-cloud.noarch 2015.5.10-2.el6 epel
salt-master.noarch 2015.5.10-2.el6 epel
salt-minion.noarch 2015.5.10-2.el6 epel
salt-ssh.noarch 2015.5.10-2.el6 epel
salt-syndic.noarch 2015.5.10-2.el6 epel // 服务器端安装salt-master和salt-minion
[root@saltserver ~]# yum -y install salt-master.noarch salt-minion.noarch // 客户端安装salt-minion即可
[root@saltminion01 ~]# yum -y install salt-minion.noarch

三、 启动saltstack服务

1.启动salt-master

[root@saltserver ~]# /etc/init.d/salt-master start
// 服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通信的端口
[root@saltserver ~]# netstat -nltup | egrep "4505|4506"
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 1589/python2.6
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 1609/python2.6

2.编辑minion端的配置文件,并启动minion

// 以saltminion01为例
[root@saltminion01 ~]# vim /etc/salt/minion
// 修改master为服务端的主机名或ip地址,如果规模较大也可以搭建本地dns服务来提供名称解析服务
master: saltserver.local
// 修改id值为客户端的主机名,这会做为服务端上显示的客户端标识
#id:
id: saltminion01.local
// 启动minion
[root@saltminion01 ~]# /etc/init.d/salt-minion start

四、 saltstack配置认证

master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的

minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,它会把公钥传输给master

master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub

以上过程需要借助salt-key工具来实现

salt-key常用选项

 -a  后面跟主机名,认证指定主机
-A 认证所有主机
-r 跟主机名,拒绝指定主机
-R 拒绝所有主机
-d 跟主机名,删除指定主机认证
-D 删除全部主机认证
-y 省略掉交互,相当于直接按了y

显示key

// 服务端
[root@saltserver ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
saltminion.local
saltminion01.local
saltserver
Rejected Keys:
[root@saltserver ~]#

认证主机

// 可以一台一台认证,也可以批量认证
[root@saltserver ~]# salt-key -a saltserver
The following keys are going to be accepted:
Unaccepted Keys:
saltserver
Proceed? [n/Y] Y
Key for minion saltserver accepted.
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltserver
Denied Keys:
Unaccepted Keys:
saltminion.local
saltminion01.local
Rejected Keys:
// 批量认证,也可通过修改配置文件实现
// 在 /etc/salt/master中取消下句注释 #auto_accept: True
[root@saltserver ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
saltminion.local
saltminion01.local
Proceed? [n/Y] Y
Key for minion saltminion.local accepted.
Key for minion saltminion01.local accepted.
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltminion.local
saltminion01.local
saltserver
Denied Keys:
Unaccepted Keys:
Rejected Keys:

删除主机认证

// 以saltminion01为例,在服务器上操作, -D删除所有认证
[root@saltserver ~]# salt-key -d saltminion01.local -y
Deleting the following keys:
Accepted Keys:
saltminion01.local
Key for minion saltminion01.local deleted.
// minion端重启服务
[root@saltminion01 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon: [ OK ]
Starting salt-minion daemon: [ OK ]
// 服务器再次检查key
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltminion.local
saltserver
Denied Keys:
Unaccepted Keys:
saltminion01.local
Rejected Keys:

拒绝key

// -R 拒绝所有
[root@saltserver ~]# salt-key -r saltminion01.local -y
Key for minion saltminion01.local rejected.
[root@saltserver ~]# salt-key -L
Accepted Keys:
saltminion.local
saltserver
Denied Keys:
Unaccepted Keys:
Rejected Keys:
saltminion01.local

五、 saltstack远程执行命令

远程执行命令语法

salt <target> <模块名>.<方法> [参数…]

target支持以下类型

Glob通配,salt的默认类型

// 模块的保存位置/usr/lib/python2.6/site-packages/salt/modules/
// 方法可以查看模块vim /usr/lib/python2.6/site-packages/salt/modules/test.py,
// 也可以从salt的官方文档查询
// 查看minion可用模块salt 'target' sys.list_modules
// 查看模块的函数 salt 'target' sys.list_functions test
// 系统帮助文件 salt 'target' sys.doc test.ping
// *表示所有主机,test代表模块,ping是方法。
[root@saltserver ~]# salt "*" test.ping
saltminion01.local:
True
saltminion.local:
True
saltserver:
True

-L,长选项--list,该选项通个逗号分隔的列表来指定多个Minion。列表中不使用glob或正则表达式进行模式

[root@saltserver ~]# salt -L saltminion.local,saltminion01.local test.ping
saltminion.local:
True
saltminion01.local:
True

短选项:-S,长选项: --ipcidr。通过过指定一个IPv4地址或一个CIDR的ipv4子网来target minion。

[root@saltserver ~]# salt -S 192.168.1.0/24 test.ping
saltminion01.local:
True
saltminion.local:
True
saltserver:
True

短选项: -E 长选项: --pcre。Perl语言兼容正则表达式(PCRE)

[root@saltserver ~]# salt -E  '^saltserver$' test.ping
saltserver:
True [root@saltserver ~]# salt -E '.*.local$' test.ping
saltminion.local:
True
saltminion01.local:
True

短选项:-G 长选项: --grain。

// 对os是CentOS的主机进行ping测试
[root@saltserver ~]# salt -G "os:CentOS" test.ping
saltserver:
True
saltminion01.local:
True
saltminion.local:
True

Grain PCRE 短选项: 无 长选项:--grain-pcre

salt –grain-pcre ‘os:red(hat|flag) test.ping’

Pillar 短选项: -I,长选项: --pillar

实例见下,pillar部分

混合(compound),短选项: -C,长选项: --compound。混合target允许用户在一个shell命令中指定多种target类型。默认使用glob,想指定其他target类型,则需要在前面追加上类型简写和@符号

简写 target
G Grain
E PCRE Minion ID
P Grain PCRE
L 列表
I Pillar
S 子网/IP地址
R SECO范围
 # salt -C ‘G@os:Ubuntu,I@role:web,S@192.168l100.0/24’ test.ping

节点组(nodegroup)短选项:-N,长选项:--nodegroup。在命令行使用前必须先在master的配置文件中以target列表进行定义(使用混合匹配语法)

  nodegroups:
webdev: 'I@role:web,G@cluster:dev'
webdqa: 'I@role:web,G@cluster:qa'
webprod: 'I@role:web,G@cluster:prod'

节点组定义完毕并重载Master配置文件后,可以通过salt进行target:

salt -N wendev test.ping

六、 grains

grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。

列出所有的grains项目名字

[root@saltserver ~]# salt 'saltminion01.local' grains.ls | head -n 10
saltminion01.local:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4

列出所有grains项目以及值

[root@saltserver ~]# salt 'saltminion01.local' grains.items | head -n 10
saltminion01.local:
----------
SSDs:
biosreleasedate:
07/02/2015
biosversion:
6.00
cpu_flags:
- fpu
- vme

grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。

我们可以根据grains收集到的一些信息,做配置管理工作。

[root@saltserver ~]# salt -G 'os:CentOS' cmd.run 'hostname'
saltminion.local:
saltminion.local
saltminion01.local:
saltminion01.local
saltserver:
saltserver.local

grains支持自定义信息。

// 在客户端编辑/etc/salt/grains文件
[root@saltminion01 ~]# vim /etc/salt/grains
// 添加如下两行自定义信息
role: nginx
env: test
// 重启minion服务
[root@saltminion01 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon: [ OK ]
Starting salt-minion daemon: [ OK ]
// 在服务端查看自定义的信息
[root@saltserver ~]# salt 'saltminion01.local' grains.item role env
saltminion01.local:
----------
env:
test
role:
nginx
// 可以利用自定义的信息来作为target使用
[root@saltserver ~]# salt -G 'role:nginx' cmd.run 'hostname'
saltminion01.local:
saltminion01.local

七、 pillar

pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

配置自定义pillar

// 在服务器端操作
[root@saltserver ~]# vim /etc/salt/master
// 取消下三行的注释
// salt中只能用空格对齐,不能用tab代替空格。空格数不限制,但是相同级别的缩进的空格数一致。
pillar_roots:
base:
- /srv/pillar
// 新建/src/pillar
rm: remove directory `/src/pillar'? y
[root@saltserver ~]# mkdir /srv/pillar
[root@saltserver ~]# ls -l !$
ls -l /srv/pillar
total 0
// 在/srv/pillar新建test.sls
[root@saltserver pillar]# echo 'conf: /etc/123.conf'>> test.sls
[root@saltserver pillar]# cat test.sls
conf: /etc/123.conf
// 在/srv/pillar下新建top.sls
conf: /etc/123.conf
[root@saltserver pillar]# cat >>top.sls<<EOF
> base:
> 'saltminion01':
> - test
> EOF
[root@saltserver pillar]# cat top.sls
base:
'saltminion01':
- test // 重启master
[root@saltserver pillar]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
// 刷新pillar配置来获取新的pillar状态
[root@saltserver pillar]# salt '*' saltutil.refresh_pillar
saltminion01.local:
True
saltminion.local:
True
saltserver:
True // 验证
[root@saltserver pillar]# salt '*' pillar.item conf
saltserver:
----------
saltminion.local:
----------
saltminion01.local:
----------
conf:
/etc/123.conf //pillar同样可以用来作为salt的匹配对象
[root@saltserver pillar]# salt -I 'conf:/etc/123.conf' test.ping
saltminion01.local:
True

八、 安装配置httpd

1.修辑master的配置文件

[root@saltserver pillar]# vim /etc/salt/master
// 取消下面三句的注释
file_roots:
base:
- /srv/salt // 创建/srv/salt目录
[root@saltserver pillar]# mkdir /srv/salt/
[root@saltserver pillar]# cd /srv/salt/

2.创建/srv/salt/top.sls文件

[root@saltserver salt]# vim top.sls
base:
'*':
- httpd
// 重启master
[root@saltserver salt]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]

3.新建/srv/salt/httpd.sls文件

[root@saltserver salt]# vim /srv/salt/httpd.sls
[root@saltserver salt]# vim httpd.sls
install_httpd:
pkg.installed:
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True

4.测试安装(以saltminion.local为例)

[root@saltserver salt]# salt 'saltminion.local' state.highstate
saltminion.local:
----------
ID: install_httpd
Function: pkg.installed
Name: httpd
Result: True
Comment: Package httpd is already installed.
Started: 00:17:18.266735
Duration: 1064.537 ms
Changes:
----------
ID: install_httpd
Function: pkg.installed
Name: httpd-devel
Result: True
Comment: The following packages were installed/updated: httpd-devel
Started: 00:17:19.331436
Duration: 33639.881 ms
Changes:
----------
apr:
----------
new:
1.3.9-5.el6_9.1
old:
1.3.9-5.el6_2
apr-devel:
----------
new:
1.3.9-5.el6_9.1
old:
apr-util-devel:
----------
new:
1.3.9-3.el6_0.1
old:
cyrus-sasl-devel:
----------
new:
2.1.23-15.el6_6.2
old:
db4:
----------
new:
4.7.25-22.el6
old:
4.7.25-20.el6_7
db4-cxx:
----------
new:
4.7.25-22.el6
old:
db4-devel:
----------
new:
4.7.25-22.el6
old:
db4-utils:
----------
new:
4.7.25-22.el6
old:
4.7.25-20.el6_7
expat:
----------
new:
2.0.1-13.el6_8
old:
2.0.1-11.el6_2
expat-devel:
----------
new:
2.0.1-13.el6_8
old:
httpd-devel:
----------
new:
2.2.15-69.el6.centos
old:
openldap:
----------
new:
2.4.40-16.el6
old:
2.4.40-12.el6
openldap-devel:
----------
new:
2.4.40-16.el6
old:
----------
ID: install_httpd
Function: service.running
Name: httpd
Result: True
Comment: Service httpd has been enabled, and is running
Started: 00:17:53.015925
Duration: 670.976 ms
Changes:
----------
httpd:
True Summary
------------
Succeeded: 3 (changed=2)
Failed: 0
------------
Total states run: 3 // 客户端上检查
[root@saltminion ~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 7505 root 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7507 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7508 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7509 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7510 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7511 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7512 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7513 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)
httpd 7514 apache 4u IPv6 43159 0t0 TCP *:http (LISTEN)

九、 配置管理文件

1.新建/srv/salt/test.sls

[root@saltserver salt]# vim /srv/salt/test.sls
// 添加如下内容
// 说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,
// 这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
file_test:
file.managed:
- name: /tmp/aminglinux.com
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 600 [root@saltserver salt]# mkdir -p test/123
[root@saltserver salt]# echo '11111' >> test/123/1.txt
[root@saltserver salt]# cat !$
cat test/123/1.txt
11111

2.编辑/srv/salt/top.sls文件

[root@saltserver salt]# vim top.sls
base:
'*':
- test

3.同步测试

[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: file_test
Function: file.managed
Name: /tmp/aminglinux.com
Result: True
Comment: File /tmp/aminglinux.com updated
Started: 13:08:40.688514
Duration: 18.984 ms
Changes:
----------
diff:
New file Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1 // saltminion01.local查看文件是否同步过去
[root@saltminion01 ~]# cat /tmp/aminglinux.com
11111
[root@saltminion01 ~]# ls -l /tmp/aminglinux.com
-rw------- 1 root root 6 Sep 5 13:08 /tmp/aminglinux.com

十、 配置管理目录

1.在master上新建配置文件/srv/salt/test_dir.sls

[root@saltserver salt]# vim /srv/salt/test_dir.sls
// 添加内容如下
file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 640
- dir_mode: 750
- mkdir: True
- clean: True
// clean:True表示源删除文件或目录,目标也会跟着删除,否则不会

2.修改top.sls

[root@saltserver salt]# vim top.sls
base:
'*':
- test_dir

3.同步测试

[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: file_dir
Function: file.recurse
Name: /tmp/testdir
Result: True
Comment: Recursively updated /tmp/testdir
Started: 13:16:30.379320
Duration: 1044.869 ms
Changes:
----------
/tmp/testdir:
----------
mode:
0750
/tmp/testdir/1.txt:
----------
diff:
New file
mode:
0640 Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1 // 在saltminion01.local查看目录是否同步成功
drwxr-x--- 2 root root 4096 Sep 5 13:16 testdir
[root@saltminion01 ~]# ls -lR /tmp/
/tmp/:
total 8
-rw------- 1 root root 6 Sep 5 13:08 aminglinux.com
drwxr-x--- 2 root root 4096 Sep 5 13:16 testdir /tmp/testdir:
total 4
-rw-r----- 1 root root 6 Sep 5 13:16 1.txt
// 注意,如果目录为空,则不会同步

十一、 配置管理远程命令

1.新建配置文件/srv/salt/shell_test.sls

[root@saltserver salt]# vim /srv/salt/shell_test.sls
// 内容如下
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root

2.在source目录下新建脚本

[root@saltserver salt]#  vim /srv/salt/test/1.sh
#!/bin/bash echo "haha"

3.修改top.sls内容

"test/1.sh" [New] 3L, 25C written
[root@saltserver salt]# vim top.sls
base:
'*':
- shell_test

4.测试

"top.sls" 3L, 30C written
[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: shell_test
Function: cmd.script
Result: True
Comment: Command 'shell_test' run
Started: 13:27:50.265831
Duration: 146.006 ms
Changes:
----------
pid:
10120
retcode:
0
stderr:
stdout:
haha Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1

十二、 配置管理计划任务

1.新建/srv/salt/cron_test.sls文件

Total states run:     1
[root@saltserver salt]# vim /srv/salt/cron_test.sls
// 添加如下内容
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
// 注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。

2.编辑top.sls文件

[root@saltserver salt]# vim top.sls
base:
'*':
- cron_test

3.测试

// 在master端推送
[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: cron_test
Function: cron.present
Name: /bin/touch /tmp/111.txt
Result: True
Comment: Cron /bin/touch /tmp/111.txt added to root's crontab
Started: 13:59:11.007707
Duration: 19.99 ms
Changes:
----------
root:
/bin/touch /tmp/111.txt Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1 //在saltminion01.local查看计划任务,不要手动修改salt管理的crontab任务,否则就没法删除或者修改这个cron了
[root@saltminion01 ~]# crontab -e
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
* 20 * * * /bin/touch /tmp/111.txt

4.删除任务计划

// 修改corn_test.sls
// 两者不能共存,要想删除一个cron,那之前的present就得去掉。
[root@saltserver salt]# vim cron_test.sls
cron_test:
cron.absent:
- name: /bin/touch /tmp/111.txt

5.同步配置文件

[root@saltserver salt]# salt 'saltminion01.local' state.highstate
saltminion01.local:
----------
ID: cron_test
Function: cron.absent
Name: /bin/touch /tmp/111.txt
Result: True
Comment: Cron /bin/touch /tmp/111.txt removed from root's crontab
Started: 14:04:29.354015
Duration: 12.691 ms
Changes:
----------
root:
/bin/touch /tmp/111.txt Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1

6.在saltminion01.local上检查

[root@saltminion01 ~]# crontab -e
// 已经删除了
# Lines below here are managed by Salt, do not edit
~

十三、 其他命令

1.拷贝master上的文件到客户端

// cp.get_file
[root@saltserver salt]# salt '*' cp.get_file salt://test/1.sh /tmp/1.sh
saltminion01.local:
/tmp/1.sh
saltminion.local:
/tmp/1.sh
saltserver:
/tmp/1.sh //验证
[root@saltminion01 ~]# ls -l /tmp/1.sh
-rw-r--r-- 1 root root 25 Sep 5 14:08 /tmp/1.sh

2.拷贝master上的目录到客户端

// cp.get_dir
[root@saltserver salt]# salt '*' cp.get_dir salt://test/123 /tmp/
saltminion01.local:
- /tmp//123/1.txt
saltserver:
- /tmp//123/1.txt
saltminion.local:
- /tmp//123/1.txt //在minion端验证
[root@saltminion01 ~]# ls -lR /tmp/
/tmp/:
total 16
drwxr-xr-x 2 root root 4096 Sep 5 14:20 123
-rw-r--r-- 1 root root 25 Sep 5 14:08 1.sh
-rw------- 1 root root 6 Sep 5 13:08 aminglinux.com
drwxr-x--- 2 root root 4096 Sep 5 13:16 testdir /tmp/123:
total 4
-rw-r--r-- 1 root root 6 Sep 5 14:20 1.txt /tmp/testdir:
total 4
-rw-r----- 1 root root 6 Sep 5 13:16 1.txt

3.显示存活的minion

//salt-run manage.up
[root@saltserver salt]# salt-run manage.up
- saltminion.local
- saltminion01.local
- saltserver

4.命令行下执行master上的shell脚本

//cmd.script
[root@saltserver salt]# salt '*' cmd.script salt://test/1.sh
saltminion01.local:
----------
pid:
10281
retcode:
0
stderr:
stdout:
haha
saltserver:
----------
pid:
80391
retcode:
0
stderr:
stdout:
haha
saltminion.local:
----------
pid:
9392
retcode:
0
stderr:
stdout:
haha

十四、 salt-ssh使用

1.安装salt-ssh

[root@saltserver salt]# yum -y install salt-ssh

2.新建配置文件 /etc/salt/roster

[root@saltserver salt]# vim /etc/salt/roster
saltminion.local:
host: 192.168.1.43
user: root
passwd: 123456
saltminion01.local:
host: 192.168.1.42
user: root
passwd: 123456

3.推送key

// 第一次推送不成功
[root@saltserver salt]# salt-ssh --key-deploy '*' -r 'w'
saltminion.local:
----------
retcode:
254
stderr:
stdout:
The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
The authenticity of host '192.168.1.43 (192.168.1.43)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)?
saltminion01.local:
----------
retcode:
254
stderr:
stdout:
The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
The authenticity of host '192.168.1.42 (192.168.1.42)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)?
//需要登录一次
[root@saltserver salt]# ssh saltminion01.local
The authenticity of host 'saltminion01.local (192.168.1.42)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'saltminion01.local' (RSA) to the list of known hosts.
root@saltminion01.local's password:
Last login: Sat Sep 1 23:33:29 2018 from 192.168.1.9
[root@saltminion01 ~]# ssh saltminion.local
The authenticity of host 'saltminion.local (192.168.1.43)' can't be established.
RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'saltminion.local,192.168.1.43' (RSA) to the list of known hosts.
root@saltminion.local's password:
Last login: Sat Sep 1 23:33:40 2018 from 192.168.1.9
[root@saltserver salt]# salt-ssh --key-deploy '*' -r 'w'
saltminion01.local:
----------
retcode:
0
stderr:
stdout:
14:48:01 up 4 days, 15:41, 2 users, load average: 0.07, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.04s 0.04s -bash
root pts/1 192.168.1.9 Sat23 5:19 0.15s 0.15s -bash
saltminion.local:
----------
retcode:
0
stderr:
stdout:
14:48:10 up 4 days, 15:41, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.00s 0.00s -bash
root pts/1 192.168.1.9 Sat23 5:38 0.04s 0.04s -bash
// 删除roster中用户的密码,再次测试
[root@saltserver salt]# salt-ssh '*' -r 'w'
saltminion.local:
----------
retcode:
0
stderr:
stdout:
14:49:55 up 4 days, 15:43, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.00s 0.00s -bash
root pts/1 192.168.1.9 Sat23 7:23 0.04s 0.04s -bash
saltminion01.local:
----------
retcode:
0
stderr:
stdout:
14:49:46 up 4 days, 15:42, 2 users, load average: 0.01, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 3days 0.04s 0.04s -bash
root pts/1 192.168.1.9 Sat23 7:04 0.15s 0.15s -bash