Python批量检测服务器是否连通

我的mentor有个小需求,说是要检测公有云上的master节点是否能ssh连上服务器,然后我这个弱弱的实习生就想到了个法子,这个法子分三个步骤:

  1. ping,可能不在同一个vpc或者vpc没有打通,所以先试试能不能ping通
  2. 22端口,可能有安全组的设置,把22端口给禁用了,所以要试试22端口通不通
  3. ssh免密连接,都3202年了,肯定都是要免密登录上服务器,这年头谁还用密码啊

但是无奈何,服务器的数量有点小多,如果有大几百台或上千台呢?那总不能一台一台手动测试吧

所以咱就是打算用Python的线程池(伪),批量模拟ping、port和ssh免密的测试

首先是最简单的ping,咱这里就是直接使用第三方库ping3,使用pip3 install ping3就可以使用,然后包装成一函数

import ping3

def ping_test(ip):
    return bool(ping3.ping(ip))

22端口咱们就使用socket进行检测,timeout设置为10s,如果超过10s没有回复,就判定为不通

import socket

def port_test(ip, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(10)
    result = sock.connect_ex((ip, port))
    sock.close()
    return not bool(result)

ssh连接咱们就使用os.system执行命令的方式模拟登录

import os

def ssh_test(ip, timeout=10):
    cmd = "ssh " \
          f"-o PasswordAuthentication=no " \
          f"-o StrictHostKeyChecking=no " \
          f"-o BatchMode=yes " \
          f"-o ConnectTimeout={timeout} " \
          f"root@{ip} 'exit'"
    return not bool(os.system(cmd))

核心的三个检测方法就是这样啦!多线程或多进程的写法就自行解决咯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值