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

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
简介: ssh服务中如何批量管理100多台机器(Paramiko、 psutil模块)、跳板机(堡垒机)

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


相关文章
|
1月前
|
安全 Linux Shell
ssh 远程控制服务
SSH(Secure Shell)是一种用于远程登录的安全协议,相比FTP和Telnet,它提供了更高的安全性,避免了明文传输带来的风险。要使用SSH远程管理Linux系统,需要配置sshd服务。本文介绍了如何克隆Linux服务器、修改网络配置,并通过SSH连接两台服务器,最后在目标服务器上创建一个日志文件。
49 4
|
4月前
|
监控 安全 Ubuntu
在Linux中,如何进行SSH服务配置?
在Linux中,如何进行SSH服务配置?
|
4月前
|
网络安全 Windows
在Windows电脑上启动并配置SSH服务
在Windows电脑上启动并配置SSH服务
1006 0
|
4月前
|
网络安全 Windows
windows安装ssh服务
windows安装ssh服务
49 0
|
4月前
|
安全 Linux 网络安全
在Linux中,使用rsync同步数据时,假如采用的是ssh方式,并且目标机器的sshd端端并不是默认的22端口,该如何做?
在Linux中,使用rsync同步数据时,假如采用的是ssh方式,并且目标机器的sshd端端并不是默认的22端口,该如何做?
|
4月前
|
安全 Linux Shell
SSH 命令完整实用指南 | Linux SSH 服务
【8月更文挑战第20天】
549 0
|
5月前
|
监控 Ubuntu 网络安全
SSH服务
【7月更文挑战第16天】
47 6
|
5月前
|
Linux 测试技术 网络安全
SSH服务开机自动
【7月更文挑战第14天】
609 5
|
5月前
|
安全 Linux Shell
SSH服务详解(2)
SSH服务详解(2)
|
5月前
|
安全 Unix Linux