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抓taobao图片爬虫
Oct 26 Python
python实现list由于numpy array的转换
Apr 04 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
python爬取淘宝商品销量信息
Nov 16 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
wxPython之wx.DC绘制形状
Nov 19 Python
python列表推导式操作解析
Nov 26 Python
Python使用正则实现计算字符串算式
Dec 29 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
Python各协议下socket黏包问题原理
Apr 12 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
Terran历史背景
2020/03/14 星际争霸
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
nodejs基础应用
2017/02/03 NodeJs
H5图片压缩与上传实例
2017/04/21 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
Python中基础的socket编程实战攻略
2016/06/01 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
python中的print()输出
2019/04/12 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python中的逆序遍历实例
2019/12/25 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
汽车专业毕业生自荐信
2013/11/03 职场文书
股东授权委托书
2014/10/15 职场文书
学校2014年度工作总结
2014/12/06 职场文书
初二学生评语大全
2014/12/26 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
开除通知书范本
2015/04/25 职场文书
农村老人去世追悼词
2015/06/23 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
python区块链持久化和命令行接口实现简版
2022/05/25 Python