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开发之for循环操作实例详解
Nov 12 Python
python 全局变量的import机制介绍
Sep 07 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python实现停车管理系统
Nov 30 Python
Python Numpy库安装与基本操作示例
Jan 08 Python
Django实现web端tailf日志文件功能及实例详解
Jul 28 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
Python3中最常用的5种线程锁实例总结
Jul 07 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
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
jQuery Tools tooltip使用说明
2012/07/14 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python中的多线程实例教程
2014/08/27 Python
使用Python对SQLite数据库操作
2017/04/06 Python
安装Python的教程-Windows
2017/07/22 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
工作决心书
2014/03/11 职场文书
建筑工地文明标语
2014/10/09 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
护士医德医风心得体会
2016/01/25 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL