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+Django+apache的配置方法详解
Jun 01 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
Python文本相似性计算之编辑距离详解
Nov 28 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
python实现简单http服务器功能
Sep 17 Python
Python编程中flask的简介与简单使用
Dec 28 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
如何基于Python创建目录文件夹
Dec 31 Python
Python中Qslider控件实操详解
Feb 20 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 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
PHP调用三种数据库的方法(2)
2006/10/09 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
Js base64 加密解密介绍
2013/10/11 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
python pytest进阶之fixture详解
2019/06/27 Python
Python何时应该使用Lambda函数
2019/07/02 Python
使用python模拟高斯分布例子
2019/12/09 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
JSF界面控制层技术
2013/06/17 面试题
会计实习期自我鉴定
2013/10/06 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
电教室标语
2014/06/20 职场文书
公司内部升职自荐信
2015/03/27 职场文书
千手观音观后感
2015/06/03 职场文书
今日说法观后感
2015/06/08 职场文书
运动会广播稿50字
2015/08/19 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
nginx常用配置conf的示例代码详解
2022/03/21 Servers