24.10 配置管理目录python
24.11 配置管理远程命令(使用shell脚本)linux
24.12 配置管理计划任务shell
24.13 其余命令vim
24.14 salt-ssh使用bash
24.10 配置管理目录ssh
1.master上vi /srv/salt/test_dir.sls //加入以下内容命令行
file_dir:code
file.recurse: #模块的名字跟分发文件的有区别ip
- name: /tmp/testdirget
- source: salt://test/123
- user: root
- file_mode: 640 #文件的权限
- dir_mode: 750 #目录的权限
- mkdir: True
- clean: True //加上它以后,源删除文件或目录,目标也会跟着删除,不然不会删除
2.修改top.sls, vi /srv/salt/top.sls //改成以下内容
base:
'*':
- test_dir
3.执行: salt 'aming-02' state.highstate
4.检查aming-02上是否有/tmp/testdir,检查里面的目录、文件以及权限
!!说明:这里有一个问题,若是source对应的目录里有空目录的话,客户端上不会建立该目录!!
实例: [root@axinlinux-01 salt]# vim 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 [root@axinlinux-01 salt]# vi top.sls [root@axinlinux-02 ~]# ls -l /tmp/testdir/ #minion上查看一下 总用量 4 -rw-r----- 1 root root 511 12月 7 23:04 1.txt [root@axinlinux-01 test]# mkdir abc #作这些操做 [root@axinlinux-01 test]# touch 1.txt [root@axinlinux-01 test]# rm -rf 123/ [root@axinlinux-01 test]# salt 'axinlinux-02' state.highstate #结果报错了 由于咱们配置了123目录下的做为分发,删除abc目录,就会报错 [root@axinlinux-01 salt]# mkdir test/123 #那咱们在建立123目录 [root@axinlinux-01 salt]# mv test/abc test/1.txt test/123/ #再把abc目录和123文件拷过来,至关于作了修改 [root@axinlinux-01 salt]# salt 'axinlinux-02' state.highstate #在更新 [root@axinlinux-02 ~]# ls /tmp/testdir/ #发现minion上并无咱们在master上建立的abc目录 1.txt #这是由于,abc目录为空,他默认空目录不作同步更新。因此要在abc目录下touch一个文件,哪怕是空文件 [root@axinlinux-01 salt]# touch test/123/abc/2.txt #咱们在abc目录下touch一个2.txt [root@axinlinux-02 ~]# tree /tmp/testdir/ #到minion上就有了 /tmp/testdir/ ├── 1.txt ├── 321 └── abc └── 2.txt
24.11 配置管理远程命令(使用shell脚本)
在salt上设置一个脚本,在minion上执行这个脚本(多条命令)
1.master上vi /srv/salt/shell_test.sls //加入以下内容
shell_test:
cmd.script: #用到的模块名
- source: salt://test/1.sh #就是咱们要执行的shell脚本
- user: root #执行的用户是谁
2.vi /srv/salt/test/1.sh //加入以下内容
#!/bin/bash
touch /tmp/111.txt
if [ ! -d /tmp/1233 ]
then
mkdir /tmp/1233
fi
3.更改top.sls内容
base:
'*':
- shell_test
4.执行: salt 'aming-02' state.highstate
5.检查是否有/tmp/111.txt和/tmp/1233
实例: [root@axinlinux-01 salt]# vim shell_test.sls shell_test: cmd.script: - source: salt://test/1.sh - user: root [root@axinlinux-01 salt]# vim test/1.sh #!/bin/bash touch /tmp/111.txt if [ ! -d /tmp/1233 ] then mkdir /tmp/1233 fi [root@axinlinux-01 salt]# vim top.sls base: '*': - shell_test [root@axinlinux-01 salt]# salt 'axinlinux-02' state.highstate [root@axinlinux-02 ~]# ls -l /tmp/ #minion上查看一下 总用量 4 -rw-r--r-- 1 root root 0 12月 7 23:53 111.txt drwxr-xr-x 2 root root 6 12月 7 23:53 1233
24.12 配置管理计划任务
1.master上vi /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都是以配置文件的形式存在的。想要删除该cron,须要改成:
cron.absent:
- name: /bin/touch /tmp/111.txt
二者不能共存,要想删除一个cron,那以前的present模块(包含内容)就得去掉。
2.更改top.sls
base:
'*':
- cron_test
3.执行: salt 'aming-02' state.highstate
4.到aming-02上检查cron,会看到提示# Lines below here are managed by Salt, do not edit
5.咱们不能随意改动它,不然就无法删除或者修改这个cron了。
24.13 其余命令
1.cp.get_file 拷贝master上的文件到客户端
salt '*' cp.get_file salt://test/1.txt /tmp/123.txt
2.cp.get_dir 拷贝目录
salt '*' cp.get_dir salt://test/conf /tmp/ //会自动在客户端建立conf目录,因此后面不要加conf,若是写成 /tmp/conf/ 则会在/tmp/conf/目录下又建立conf
3.salt-run manage.up 显示存活的minion
4.salt '*' cmd.script salt://test/1.sh 命令行下执行master上的shell脚本
实例: 1. [root@axinlinux-01 salt]# salt '*' cp.get_file salt://test/1.txt /tmp/123.txt #报错,由于test目录下没有1.txt [root@axinlinux-01 salt]# cp /etc/passwd /srv/salt/test/1.txt #搞一个过来 [root@axinlinux-01 salt]# salt '*' cp.get_file salt://test/1.txt /tmp/123.txt axinlinux-02: /tmp/123.txt axinlinux-01: Minion did not return. [Not connected] #再次报错。由于master上的minion服务没开启 [root@axinlinux-01 salt]# systemctl start salt-minion #开启master上的minion [root@axinlinux-01 salt]# salt '*' cp.get_file salt://test/1.txt /tmp/123.txt [root@axinlinux-01 salt]# ls -l /tmp/123.txt #查看一下 -rw-r--r-- 1 root root 2374 12月 8 00:34 /tmp/123.txt 2. [root@axinlinux-01 salt]# salt '*' cp.get_dir salt://test/conf /tmp/ #报错,由于test目录下没有conf目录 axinlinux-02: axinlinux-01: [root@axinlinux-01 salt]# ls test #看一下test目录 123 1.sh 1.txt [root@axinlinux-01 salt]# salt '*' cp.get_dir salt://test/123 /tmp/ #再次执行 axinlinux-01: - /tmp//123/1.txt - /tmp//123/321 - /tmp//123/abc/2.txt axinlinux-02: - /tmp//123/1.txt - /tmp//123/321 - /tmp//123/abc/2.txt [root@axinlinux-01 salt]# ls -l /tmp/123 #目录下的而全部都拷过来了 总用量 0 -rw-r--r-- 1 root root 0 12月 8 00:39 1.txt -rw-r--r-- 1 root root 0 12月 8 00:39 321 drwxr-xr-x 2 root root 19 12月 8 00:39 abc [root@axinlinux-01 salt]# ls -dl /tmp/123 #查看123目录自己 drwxr-xr-x 3 root root 41 12月 8 00:39 /tmp/123 3. [root@axinlinux-01 salt]# salt-run manage.up - axinlinux-01 - axinlinux-02 4. [root@axinlinux-01 salt]# salt '*' cmd.script salt://test/1.sh axinlinux-02: ---------- pid: 8258 retcode: 0 stderr: stdout: axinlinux-01: ---------- pid: 13087 retcode: 0 stderr: stdout: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24.14 salt-ssh使用
1.salt-ssh不须要对客户端作认证,客户端也不用安装salt-minion,它相似pssh/expect
#自动的更改公钥
#第一次须要输入密码(/etc/salt/roster文件里定义或手动先ssh一下),第二次就不须要了
2.安装很简单yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
3.yum install -y salt-ssh
4.vi /etc/salt/roster //增长以下内容 #salt-ssh须要的配置文件
axinlinux-01: #注意冒号
host: 192.168.208.128
user: root #由于这里是root,因此也不须要定义sudo了
passwd: wangxin789
axinlinux-02:
host: 192.168.208.130
user: root
passwd: wangxin789
5.salt-ssh --key-deploy '*' -r 'w' #执行的命令是w
//第一次执行的时候(--key-deploy)会自动把本机的公钥放到对方机器上,而后就能够把roster里面的密码去掉
实例: [root@axinlinux-01 salt]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm #已经安装过了,就不用安装了。直接安装salt-ssh就能够了 [root@axinlinux-01 salt]# yum install -y salt-ssh [root@axinlinux-01 salt]# vim /etc/salt/roster axinlinux-01: host: 192.168.208.128 user: root passwd: wangxin789 axinlinux-02: host: 192.168.208.130 user: root passwd: wangxin789 [root@axinlinux-01 salt]# salt-ssh --key-deploy '*' -r 'w' axinlinux-02: ---------- retcode: 0 stderr: stdout: root@192.168.208.130's password: 01:02:36 up 2:52, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.208.1 22:20 32:36 0.10s 0.10s -bash axinlinux-01: ---------- retcode: 0 stderr: stdout: 01:02:36 up 2:52, 1 user, load average: 0.09, 0.13, 0.11 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.208.1 22:20 4.00s 2.00s 0.03s /usr/bin/python /usr/bin/salt-ssh --key-deploy * -r w [root@axinlinux-01 salt]# ls -l /root/.ssh/authorized_keys #他能自动的更改公钥,来检查一下更改时间 -rw-r--r--. 1 root root 1219 12月 8 00:55 /root/.ssh/authorized_keys [root@axinlinux-01 salt]# date 2018年 12月 08日 星期六 01:03:42 CST [root@axinlinux-01 salt]# vim /etc/salt/roster #将密码删掉,让他用密钥登陆执行 axinlinux-01: host: 192.168.208.128 user: root axinlinux-02: host: 192.168.208.130 user: root [root@axinlinux-01 salt]# salt-ssh --key-deploy '*' -r 'w' #也是能够的