paramiko多IP地址连续跳转场景

paramiko工具

用法

  1. 可以在多个服务器之间多级跳转,同时抓取各个服务器上的log并分析,实现对各个服务器上的服务的状态监控
  2. 可以同时批量控制多个服务器,实现对多个服务器的批量处理
  3. 可以同时更新部署多个服务器

注意

  1. 建立channel时,需要定义timeout,timeout可以重复定义,当recv超时时会抛错退出,
  2. recv方法是一个阻塞函数
  3. recv方法取值时可能中途出现空字符串的情况
  4. 当返回的log刷新时间较长时,建议加长timeout的设置
  5. 当不确定返回log的样式时,建议以超时时长作为结束条件
  6. 可以如果需要执行的命令过多的情况下,将各服务器命令封装到json文件中,循环解释并执行各服务器上的命令
  7. 如果服务器IP过多时,可额外单建一个配置py

代码样式

import paramiko

ip = "127.0.0.1"
username = "u1"
password = "p1"

ip2 = "127.0.0.1"
username2 = "u1"
password2 = "p1"


def get_log(channel: paramiko.SSHClient.invoke_shell(), timeout=5, keyword=""):
    if keyword:
        log = ""
        try:
            while keyword not in log:
                msg = channel.recv(65535).decode()
                log += msg
            print(log)
            return "getkeyword", log
        except:
            print(log)
            return "no_keyword_appear",log
    else:
        log = ""
        channel.settimeout(timeout)
        try:
            while True:
                msg = channel.recv(65535).decode()
                log += msg
        except:
            print(log)
            return "timeout", log


ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip, username=username, password=password)
channel = ssh_client.invoke_shell()
channel.settimeout(5)
channel.send(b"ssh {username2}@{ip2} \n")
respose=get_log(channel=channel, keyword="password:",timeout=5)
if respose[0]=="getkeyword":
    channel.send(b"{password2}\n")
channel.send(b"pwd\n")
channel.closed
ssh_client.close()

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值