python 远程执行命令的详细代码


Posted in Python onFebruary 15, 2022

1.简单版

# coding: utf-8

import paramiko
import re
from time import sleep
def ssh():
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())    #指定当对方主机没有本机公钥的情况时应该怎么办,AutoAddPolicy表示自动在对方主机保存下本机的秘钥
    ssh.connect('172.16.1.5',22,'linyouyi','123456')    #SSH端口默认22,可改
    stdin,stdout,stderr = ssh.exec_command("df -hl")    #这三个得到的都是类文件对象
    outmsg,errmsg = stdout.read(),stderr.read()    #读一次之后,stdout和stderr里就没有内容了,所以一定要用变量把它们带的信息给保存下来,否则read一次之后就没有了
    #outmsg = str(outmsg)
    #print(outmsg.replace("\\n","\\r\\n"))
    print(outmsg.decode())
    print(errmsg)
    if errmsg == "":
        print(outmsg)
    ssh.close()
if __name__ == '__main__':
    ssh()

2.封装版

# coding: utf-8

import paramiko
import re
from time import sleep
# 定义一个类,表示一台远端linux主机
class Linux(object):
    # 通过IP, 用户名,密码,超时时间初始化一个远程Linux主机
    def __init__(self, ip, username, password, timeout=30):
        self.ip = ip
        self.username = username
        self.password = password
        self.timeout = timeout
        # transport和chanel
        self.t = ''
        self.chan = ''
        # 链接失败的重试次数
        self.try_times = 3
    # 调用该方法连接远程主机
    def connect(self):
        while True:
            # 连接过程中可能会抛出异常,比如网络不通、链接超时
            try:
                self.t = paramiko.Transport(sock=(self.ip, 22))
                self.t.connect(username=self.username, password=self.password)
                self.chan = self.t.open_session()
                self.chan.settimeout(self.timeout)
                self.chan.get_pty()
                self.chan.invoke_shell()
                # 如果没有抛出异常说明连接成功,直接返回
                print(u'连接%s成功' % self.ip)
                # 接收到的网络数据解码为str
                print(self.chan.recv(65535).decode('utf-8'))
                return
            # 这里不对可能的异常如socket.error, socket.timeout细化,直接一网打尽
            except Exception as e1:
                if self.try_times != 0:
                    print(u'连接%s失败,进行重试' %self.ip)
                    self.try_times -= 1
                else:
                    print(u'重试3次失败,结束程序')
                    exit(1)
    # 断开连接
    def close(self):
        self.chan.close()
        self.t.close()
    # 发送要执行的命令
    def send(self, cmd):
        cmd += '\r'
        # 通过命令执行提示符来判断命令是否执行完成
        p = re.compile(r']$')
        result = ''
        # 发送要执行的命令
        self.chan.send(cmd)
        # 回显很长的命令可能执行较久,通过循环分批次取回回显
            sleep(2)
            ret = self.chan.recv(65535)
            ret = ret.decode('utf-8')
            result += ret
            if p.search(ret):
                print(result)
                return(result)
                
if __name__ == '__main__':
    host = Linux('172.16.1.5', 'linyouyi', '123456')
    host.connect()
    host.send('ll')
    host.close()

到此这篇关于python 远程执行命令的文章就介绍到这了,更多相关python 远程执行命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python抓取京东价格分析京东商品价格走势
Jan 09 Python
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
python常规方法实现数组的全排列
Mar 17 Python
Python中decorator使用实例
Apr 14 Python
Python中用sleep()方法操作时间的教程
May 22 Python
python查看zip包中文件及大小的方法
Jul 09 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
python实时监控cpu小工具
Jun 21 Python
详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
Feb 25 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
python爬虫用mongodb的理由
Jul 28 Python
python 详解turtle画爱心代码
python分分钟绘制精美地图海报
基于PyQT5制作一个桌面摸鱼工具
Feb 15 #Python
python接口测试返回数据为字典取值方式
Feb 12 #Python
Python socket如何解析HTTP请求内容
Feb 12 #Python
python全面解析接口返回数据
Feb 12 #Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 #Python
You might like
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php bootstrap实现简单登录
2016/03/08 PHP
php blowfish加密解密算法
2016/07/02 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
DEFER怎么用?
2006/07/01 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
Three.js学习之网格
2016/08/10 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python subprocess模块学习总结
2014/03/13 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
Python构建图像分类识别器的方法
2019/01/12 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
Python 防止死锁的方法
2020/07/29 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
解除合同协议书
2014/04/17 职场文书
社保委托书怎么写
2014/08/02 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
新生开学寄语大全
2015/05/28 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers