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: #模塊的名字跟分發文件的有區別crontab
- name: /tmp/testdirip
- 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-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了。
實例:
[root@axinlinux-01 salt]# vim cron_test.sls
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
[root@axinlinux-01 salt]# vim top.sls
base:
'*':
- cron_test
[root@axinlinux-01 salt]# salt 'axinlinux-02' state.highstate
[root@axinlinux-02 ~]# crontab -l #minion上查看一下crontab
# Lines below here are managed by Salt, do not edit #這兩行不要改,否則沒辦法修改或刪除了
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
* 20 * * * /bin/touch /tmp/111.txt
[root@axinlinux-01 salt]# vim cron_test.sls #好比咱們改個時間
cron_test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: 59 #改成59分
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'
[root@axinlinux-01 salt]# salt 'axinlinux-02' state.highstate
[root@axinlinux-02 ~]# crontab -l #再次查看crontab就改變了
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
59 20 * * * /bin/touch /tmp/111.txt
而後刪除這個cron
[root@axinlinux-01 salt]# vim cron_test.sls
cron_test:
cron.absent:
- name: /bin/touch /tmp/111.txt
[root@axinlinux-01 salt]# salt 'axinlinux-02' state.highstate
[root@axinlinux-02 ~]# crontab -l #minion上查看就沒有了
# Lines below here are managed by Salt, do not edit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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' #也是能夠的