ssh服务中如何批量管理100多台机器(Paramiko、 psutil模块)、跳板机(堡垒机)

目录

 

1、ssh服务中如何管理100多台机器?

2、跳板机:安全加固

1、scp 命令:传输文件

2、sftp 命令:用于在连接的机器上传下载文件

3、pssh pscp命令:批量处理命令

4、批量ping 使用fping命令

1、ssh服务中如何管理100多台机器?

需求分析:

使用python/shell获取对方服务器上的cpu使用率,内存使用情况,磁盘分区的使用情况,网络带宽的使用情况。

假如有一台控制服务器和100台服务器,控制服务器上需要管理这100中的web、db、file等,然后需要在这100台服务器上进行安装软件、备份文件、升级软件等操作,如何能有效的进行管理呢:

1、首先先建立免密通道

使用脚本(monitor脚本)去实现与其他机器之间建立通信。

2、编写脚本。psutil(脚本信息在下面)

top,free,df,dstat,iftop等

python/go编写monitor.py monitor.go:

连接到对方的服务器上

paramiko模块,ssh模块--->密码认证或者密钥认证

实现ssh远程连接的功能。

3、然后将脚本(psutil)上传到这100台服务器上。

脚本中实现获取系统信息,需要使用scp上传到100台机器上

通过scp:远程拷贝 底层通过ssh协议远程连接到其他机器上,复制文件。

scp -r root@主机名

查看系统资源、内存、网络状态:top,free,df,dstat,iftop等

 psutil 或者 gopsutil (需要go语言编写,但是还没实现)获取需要监控的cpu,内存,磁盘,网络带宽等信息

yum  install gcc  gcc-devel  python3-devel -y
pip3 install psutil

4、在本机执行远程调用执行脚本(psutil.py)命令,通过ssh服务指令。

ssh root@192.168.1.1 bash /tmp/psutil.py

/tmp/psutil.py:这个是被管理的机器存放监控系统资源的脚本

使用Python脚本:获取需要监控的cpu,内存,磁盘,网络带宽等信息。

两个脚本:

monitor脚本:是进行与其他机器之间进行通信的脚本文件,需要在本地执行。

psutil.py(监控系统资源的脚本,需要上传到需要被管理的机器上)

psutil是python中的一个第三方模块,需要下载。它能够轻松的实现获取系统运行的进程和系统利用率(CPU、内存、磁盘、网络等)信息,主要应用于系统监控。实现了同等命令命令行实现的功能:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。能够跨平台运行。

psutil的主要功能包括:CPU、磁盘、内存、网络、进程等。

[root@syq ~]# cat  psutil.py 

#!/usr/bin/python3

import psutil

import datetime

def linux_monitor():

    # cpu的使用率

    cup_per = psutil.cpu_percent()

    # 内存使用率

    mem_per = psutil.virtual_memory().percent

    # 磁盘使用率

    disk_per = psutil.disk_usage('/').percent

    # 网络使用情况  收发多少数据 net.bytes_recv、net.bytes_sent

    net = psutil.net_io_counters()

    # 获取当前系统时间

    current_time = datetime.datetime.now().strftime("%F %T")  

    # 拼接显示

    str = ""

    str+= "|---------time--------|---cpu---|----memory----|----disk----|--------------net-------------|\n"

    str+= "| %s |   %s%%  |    %s%%     |    %s%%   | recv:%.2fMB  sent:%.2fMB |\n" \

              % (current_time, cup_per, mem_per, disk_per, net.bytes_recv/1024/1024, net.bytes_sent/1024/1024)

    print(str)   

linux_monitor()

编写脚本:monitor.py(建立连接的脚本-Paramiko模块)。在本机执行脚本,使用到的是paramiko,Paramiko是用python语言写的一个模块,远程连接到Linux服务器,查看上面的日志状态,批量配置远程服务器,文件上传,文件下载等。

[root@syq ~]# cat  monitor.py
#!/usr/bin/python3
import paramiko

# 指定本地的RSA私钥文件
key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')

# 建立连接
trans = paramiko.Transport(('
192.168.2.127', 22))
trans.connect(username='root', pkey=key)

# 创建ssh对象,将_transport指定为上面的trans
ssh = paramiko.SSHClient()
ssh._transport = trans

# 创建sftp对象,指定连接的通道
sftp = paramiko.SFTPClient.from_transport(trans)

# 上传
psut.py文件
sftp.put(localpath='/root/psut.py', remotepath='/root/p.py')

# 添加可执行权限,运行脚本
ssh.exec_command('chmod +x p.py')
stdin, stdout, stderr = ssh.exec_command('./p.py')
print(stdout.read().decode())

2、跳板机:安全加固

1、不能密码登录

2、不能使用root登录

3、修改默认端口

4、添加防火墙配置 iptables设置

5、使用跳板机登录

 1、加入跳板机(堡垒机)的工作流程:

客服端(client)要通过跳板机(A)、堡垒机去连接B C D。

客户端将私钥交给xshell管理,跳到A到时直接调动xshell,A然后登录到B上面时直接输入客户端的公钥,A上面就不需要生成公私钥。跳转到其他机子上面都只需要管理客户端的公私钥。

登录上还是在windows上面,只是发送数据包,返回数据包结果,结果以界面的形式展示出来()比如在xshell界面里面输入ls命令。

jumpserver:开源的跳板机软件,基于Python的django。也可以自己制作。

2、#######################ssh tcp wrappers#########

SSH使用TCP Wrappers实现访问控制;类似于防火墙访问。

主要配置文件

/etc/hosts.allow 白名单

/etc/hosts.deny 黑名单

3、TCP Wrappers可以控制哪些服务

① 受super daemon(xinetd)管理的服务

② 支持libwrap.so模块的服务

③ TCP Wrappers的访问控制原则

首先检查 hosts.allow 文件,若找到相匹配的策略,则允许访问

否则继续检查 hosts.deny (sshd:all)文件,若找到相匹配的策略,则拒绝访问

如果两个文件中都没有相匹配的策略,则允许访问。

3、#######临时修改主机名

[sanchuang@a ~]$ sudo  hostname wy

4、########修改客户端配置##############

配置文件: ~/.ssh/config

在A机器上vim config

ssh B 测试是否连接成功

(修改A机器的)

##############################

ForwardAgent yes

StrictHostKeyChecking no

ServerAliveInterval 60

IdentityFile ~/.ssh/id_rsa

#############################

Host B(跳板机)

    HostName 

192.168.119.141(表示连接B机器网址)

    User   sanchuang

    Port   22

(如果B机器的用户没有公私钥,可以用root用户尝试),或者在B机器的sanchuang用户下面加入A机子的公钥(cat id_rsa.pub )在A机子的authorized_keys文件里面。

[sanchuang@localhost .ssh]$ vim authorized_keys
Host 10.*
    User  sanchuang
    Port 22
    ProxyCommand  ssh 
192.168.0.39 -W %h:%p -l sanchuang -p 22

[sanchuang@localhost .ssh]$ chmod 600 authorized_keys     chmod 755 .ssh 

 scp aa B:/tmp

1、scp 命令:传输文件

#传输文件

[sanchuang@a ~]$ scp ahost B:/tmp

B后面要加:以及路径。

ahost 100% 0 0.0KB/s 00:00

[sanchuang@a ~]$ scp B:/tmp/bhost ./

bhost

scp B:/tmp/aa ./两台机器之前拷贝
[root@scmysql ~]# scp -P 22 onekey_install_mysql_binary_v3.sh root@192.168.77.132:/opt

scp B:/tmp/aa ./两台机器之前拷贝

2、sftp 命令:用于在连接的机器上传下载文件

sftp 用户名@主机名

[sanchuang@a ~]$ sftp B

Connected to B.

sftp> ls

2q aa adir bb bdir testdir testdir2 testhost

sftp> get bdir

Fetching /home/sanchuang/bdir/ to bdir

Cannot download non-regular file: /home/sanchuang/bdir/

sftp> mget bdir

Fetching /home/sanchuang/bdir/ to bdir

Cannot download non-regular file: /home/sanchuang/bdir/

sftp> get 2q

Fetching /home/sanchuang/2q to 2q

/home/sanchuang/2q 100% 226 107.5KB/s 00:00

sftp> quit()

Invalid command.

sftp> exit()

Invalid command.

sftp> exit

3、pssh pscp命令:批量处理命令

####批量处理

pssh

-h 指定主机文件列表,内容格式"[user@]host[:port]"

-i 指定每个服务器的处理信息

[sanchuang@a ~]$ pssh -h ip.txt -i "/usr/sbin/ip a"

#批量传输文件

pscp.pssh

#把当前目录下的pscptest文件传送到目标主机的/tmp目录下

[sanchuang@a ~]$ pscp.pssh -h ip.txt pscptest /tmp
[1] 17:37:21 [SUCCESS] sanchuang@192.168.0.48:2233

[2] 17:37:22 [SUCCESS] sanchuang@192.168.0.39:2233

4、批量ping 使用fping命令

#根据文件指定ip去ping

[sanchuang@a ~]$ fping -f ip-2.txt

192.168.0.39 is alive

192.168.0.48 is alive

[sanchuang@a ~]$ cat ip-2.txt

192.168.0.39

192.168.0.48

#根据网段去ping。

[sanchuang@a ~]$ fping -g 192.168.0.0/24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值