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爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Python开发的实用计算器完整实例
May 10 Python
python僵尸进程产生的原因
Jul 21 Python
django 在原有表格添加或删除字段的实例
May 27 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
python游戏地图最短路径求解
Jan 16 Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
详解Django中异步任务之django-celery
Nov 05 Python
Pytorch使用shuffle打乱数据的操作
May 20 Python
Python 数据可视化之Bokeh详解
Nov 02 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简单提示框alert封装函数
2010/08/08 PHP
php 文章调用类代码
2011/08/11 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
js中的this的指向问题详解
2019/08/29 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
Python三元运算实现方法
2015/01/12 Python
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
python实现发送邮件功能
2017/07/22 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
Python构建图像分类识别器的方法
2019/01/12 Python
python从子线程中获得返回值的方法
2019/01/30 Python
python实现操作文件(文件夹)
2019/10/31 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
学校办公室主任职责
2013/12/27 职场文书
村干部培训班主持词
2014/03/28 职场文书
考试保密承诺书
2014/08/30 职场文书
迟到检讨书
2015/01/26 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL