【python接口自动化测试-ssh远程连接堡垒机,并跳转到目标主机执行批量shell指令】

python实现ssh远程连接linux主机,并执行指令,上篇已提到;

在一个堡垒机自动化测试的项目中,一开始我简单的想,用paramiko远程连接linux主机的方式,去连接堡垒机,然后再发送指令,应该就可以实现了吧。

实际上,思路是没错的,堡垒机本质上也是一个linux主机,ssh连接堡垒机也是OK的,但是连接上后,使用exec_command方法发送指令选择资源主机时,却总是返回No support the request method,“不支持请求方法”?

开始猜想,难道ssh登录堡垒机后的界面,并不是bash吗?所以不支持exec_command?咨询了开发人员,确认了,确实堡垒机的界面不是普通shell交互界面,大概有加一层类似通道的东西。

说的很模糊,我差点要放弃了,转念一想,paramiko好像是可以创建chanel连接的,试试chanel吧

对于paramiko的模块只是依葫芦画瓢,并没有深刻的理解和研究,就是拿来用能实现我的需求就ok了,所以chanel的概念我也不是很明白,只是一试;

居然就OK了,好激动!!

中间加了sleep等待堡垒机连接资源主机,并且堡垒机选择资源的指令加了回车'\n'

# SSH远程连接堡垒机操作系统,并选择目标主机资源id,进入目标主机执行批量命令
def sshHost_sendCmd(ip,username,password,hosttype,port,cmds):
    '''
    :param ip: 堡垒机ip
    :param username: 堡垒机用户
    :param password: 用户的密码
    :param hosttype: 主机类型,普通主机-normal,数据库主机-db
    :param port: 堡垒机端口
    :param cmds: 存放n个命令的列表
    :return:
    '''
    paramiko.util.log_to_file("paramiko.log")
    try:
        # excmd = ';'.join(cmds)
        s = paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(hostname=ip, port=port, username=username, password=password)
        #激活连接的终端
        channel = s.invoke_shell()
        #读、写操作超时时间,10秒
        channel.settimeout(10)
        choose =''
        if hosttype == 'normal':
            choose = '0'+'\n'
            print u'选择普通linux资源主机:0',
        elif hosttype == 'db':
            choose = '1'+'\n'
            print u'选择mysql资源主机:1',
        else:print u'hosttype输入错误!(normal/db)'
        #输入选择的资源主机
        channel.send(choose)
        #等待堡垒机连接资源主机成功
        time.sleep(5)
        #发送cmds中的指令到资源主机
        for command in cmds:
            print u'执行命令:%s'%command
            channel.send(command+'\n')
            time.sleep(2)
            try:
                command_res = channel.recv(65533).decode('utf-8').strip()
                print command_res
            except Exception as e:
                print (u'在目标机(IP: %s)上进行读取操作超时')
                break
        channel.close()
    except Exception as e:
        print(e)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值