第三十八课 自动化运维之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