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解析xml模块封装代码
Feb 07 Python
python连接mysql并提交mysql事务示例
Mar 05 Python
python中zip()方法应用实例分析
Apr 16 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
python3操作mysql数据库的方法
Jun 23 Python
python实现人脸识别代码
Nov 08 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
python函数map()和partial()的知识点总结
May 26 Python
Python如何生成xml文件
Jun 04 Python
python中有帮助函数吗
Jun 19 Python
详解pycharm自动import所需的库的操作方法
Nov 30 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
php-fpm配置详解
2014/02/12 PHP
php制作文本式留言板
2015/03/18 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
python编写分类决策树的代码
2017/12/21 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
基于python实现从尾到头打印链表
2019/11/02 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
介绍下java.util.Arrays类
2012/10/16 面试题
计算机求职自荐信范文
2014/04/19 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书