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和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
python time模块用法实例详解
Sep 11 Python
python以环状形式组合排列图片并输出的方法
Mar 17 Python
python使用urlparse分析网址中域名的方法
Apr 15 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
python实现马丁策略的实例详解
Jan 15 Python
Python何绘制带有背景色块的折线图
Apr 23 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
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
Javascript开发包大全整理
2006/12/22 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
Js实现无刷新删除内容
2015/04/29 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
python 多线程应用介绍
2012/12/19 Python
python实现复制整个目录的方法
2015/05/12 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
2019/07/15 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Python如何调用外部系统命令
2019/08/07 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
python中实现栈的三种方法
2020/12/19 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
如何写一份好的自荐信
2014/01/02 职场文书
开业庆典答谢词
2014/01/18 职场文书
市场安全管理制度
2014/01/26 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
运动会开幕式主持词
2015/07/01 职场文书