www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

根据以往运维工作中操作经验来说,当管理上百台上千台服务器时,选择一款批量操作工具是及其有必要的。

早期习惯于在ssh信任关系的前提下做for;do;done循环语句的批量操作,后来逐渐趋于使用批量工具操作:

1)pssh工具,它需要提前做好key关联的ssh信任关系,比起for循环语句,我之前还是比较喜欢用pssh。

2)expect 最大的有点就是交互,但是要成高性能的话,需要自己写多线程的。

3)python利器,用过一段时间,该有的都有的,很是强大。

from fabric import env
env.hosts = ['user1@host1:port1', 'user2@host2.port2']
env.passwords = {'user1@host1:port1': 'password1', 'user2@host2.port2': 'password2'}
1.
2.
3.


4)最后,还是比较看好salt-ssh。

salt-ssh可以独立运行的,不需要minion端。salt-ssh可以代替expect之类的密码推送脚本,看起来功能不比expect差 。 salt-ssh 用的是sshpass进行密码交互的。

下面就对salt-ssh的使用做一简单梳理:

1)安装

[root@bastion-IDC ~]# wget http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@bastion-IDC ~]# rpm -ivh epel-release-6-8.noarch.rpm --force

[root@bastion-IDC ~]# yum install -y salt-ssh

2)配置使用

可以把要执行的信息,比如ip,帐号,密码,端口等都放到一个文件里面。当然文件路径是可以随便定义的,官方是指定到了/etc/salt/roster。如下:

[root@linux-node1 ~]# cat /etc/salt/roster

web1:
host: 192.168.1.118 //前面留四个空格,冒号后空一格
user: root //前面留四个空格,冒号后空一格
password: PASSWORD //前面留四个空格,冒号后空一格
port: 22 //前面留四个空格,冒号后空一格
web2:
host: 192.168.1.105
user: root
password: PASSWORD
port: 22
web3:
host: 192.168.1.19
user: root
password: K46u@!kB9G
port: 25791
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.


然后执行批量操作命令:

[第一次执行的时候,有的机器可能会提醒输入ssh初次登录询问yes/no,如果要去掉这个yes/no的询问环节,只需要修改本机的/etc/ssh/ssh_config文件中的"# StrictHostKeyChecking ask" 为 "StrictHostKeyChecking no",然后重启sshd服务即可]

[root@linux-node1 ~]# salt-ssh "*" -r 'free -m'

web3:
----------
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.109 (192.168.1.109)' can't be established.
RSA key fingerprint is 7d:83:12:5d:85:c4:36:c9:21:41:c2:90:89:5b:0a:f5.
Are you sure you want to continue connecting (yes/no)?
web2:
----------
retcode:
0
stderr:

stdout:
total used free shared buff/cache available
Mem: 3951 52 2524 20 1374 3610
Swap: 534 0 534

web1:
----------
retcode:
0
stderr:

stdout:
total used free shared buffers cached
Mem: 3832 3617 215 0 174 1930
-/+ buffers/cache: 1511 2320
Swap: 1535 36 1499
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.


特别注意:

salt-ssh第一次执行是根据roster文件里配置的账号密码推送密码,来实现自动交互的。

执行完了后会在目标服务器里面,追加master端(即源机器)的key。

然后就可以删除roster里面的passwd密码条目了,删除roster文件里的密码条目后,不影响后批量操作的执行。

如下:

把roster文件里的password条目删除后,还是可以运行,这里就不是用sshpass推送密码了,而是直接通过key了 !!!

[root@linux-node1 ~]# cat /etc/salt/roster

web1:
host: 192.168.1.118
user: root
port: 22
web2:
host: 192.168.1.105
user: root
port: 22
web3:
host: 192.168.1.19
user: root
port: 25791
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.


[root@linux-node1 ~]# salt-ssh "*" -r 'df -h'

web3:
----------
retcode:
0
stderr:

stdout:
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 396M 21M 375M 6% /run
/dev/vda1 3.9G 2.3G 1.5G 61% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda6 11G 26M 9.6G 1% /home
cgmfs 100K 0 100K 0% /run/cgmanager/fs
tmpfs 396M 0 396M 0% /run/user/0

web1:
----------
retcode:
0
stderr:

stdout:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
8.1G 4.8G 2.9G 63% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/vda1 190M 37M 143M 21% /boot

web2:
----------
retcode:
0
stderr:

stdout:
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 396M 21M 375M 6% /run
/dev/vda1 3.9G 2.1G 1.7G 56% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda6 11G 26M 9.6G 1% /home
cgmfs 100K 0 100K 0% /run/cgmanager/fs
tmpfs 396M 0 396M 0% /run/user/0
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.


如下:--roster-file参数后面跟的是配置文件,如果是官方指定的配置文件/etc/salt/roster,则可以省略。

如果是自己自定义的文件,则需要用这个参数指定

[root@linux-node1 ~]# salt-ssh "*" --roster-file /etc/salt/roster -r 'uptime'

登录后复制
web2:
----------
retcode:
0
stderr:

stdout:
04:41:49 up 79 days, 15:22, 1 user, load average: 0.00, 0.00, 0.00

web1:
----------
retcode:
0
stderr:

stdout:
04:41:57 up 75 days, 17:05, 3 users, load average: 0.02, 0.16, 0.20

web3:
----------
retcode:
0
stderr:

stdout:
04:41:42 up 79 days, 6:42, 1 user, load average: 0.00, 0.00, 0.00

posted on 2023-01-31 14:13  秦瑞It行程实录  阅读(96)  评论(0编辑  收藏  举报
www.cnblogs.com/ruiyqinrui