基于paramiko的一个类库

这个博客介绍了如何使用Python的paramiko库建立SSH连接。通过定义一个Connect类,实现了打开连接、关闭连接以及发送命令的功能。在打开连接时,会检查登录是否成功。send_cmd方法用于发送命令并接收响应,而send_cmd_expect则在发送命令后判断响应是否包含预期的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding:utf-8 -*-

import paramiko
import time
import sys


class Connect:
    def __init__(self, host, user, pwd, port=22):
        self.host = host
        self.user = user
        self.pwd = pwd
        self.port = port
        self.recv_buffer = 65535
        self.EOF_list = []
        self.is_connected = False

    def open_connect(self, timeout=10):
        try:
            self.ssh_sock = paramiko.Transport(self.host, self.port)
            self.ssh_sock.connect(username=self.user, password=self.pwd)
            self.handle = self.ssh_sock.open_session()
            self.handle.settimeout(timeout)
            self.handle.get_pty()
            self.handle.invoke_shell()
            self.is_connected = True
            time.sleep(5)
            if self.handle.recv_ready():
                rsp = self.handle.recv(self.recv_buffer)
                if 'login' in rsp:
                    print('Login succeed!')
                    sys.stdout.write(rsp)
                self.EOF_list.append(rsp.split('\n')[-1].split()[0])
        except Exception, e:
            print('ssh Open Error: %s' % e)

    def close_connect(self):
        if self.is_connected:
            try:
                self.handle.close()
                self.ssh_sock.close()
                self.is_connected = False
            except Exception, e:
                self.is_connected = False
                print('ssh Close Error: %s' % e)

    def send_cmd(self, cmd, timeout=10):
        if self.is_connected:
            try:
                startTime = time.time()
                self.handle.settimeout(timeout)
                self.handle.send('%s\r' % cmd)
                rsp = ''
                brk_flag = False
                add_flag = False
                while time.time() < startTime + timeout:
                    time.sleep(0.5)
                    if self.handle.recv_ready():
                        rsp = rsp + self.handle.recv(self.recv_buffer)
                        for eof in self.EOF_list:
                            if rsp.rfind(eof) > rsp.rfind('\n'):
                                brk_flag = True
                                add_flag = False
                                break
                        else:
                            add_flag = True
                    if brk_flag:
                        break
                if add_flag:
                    lines = rsp.split('\n')
                    if lines:
                        last_line = lines[-1].split()
                        if last_line:
                            if last_line[0]:
                                self.EOF_list.append(last_line[0])
                sys.stdout.write(rsp)
                return rsp
            except Exception, e:
                print('ssh Cmd Error: %s' % e)

    def send_cmd_expect(self, cmd, expect, timeout=10):
        if self.is_connected:
            rsp = self.send_cmd(cmd, timeout)
            if rsp:
                if str(expect) in rsp:
                    return True
                else:
                    return False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值