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写的图片蜘蛛人代码
Aug 27 Python
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
利用aardio给python编写图形界面
Aug 21 Python
python实现SOM算法
Feb 23 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
python游戏地图最短路径求解
Jan 16 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
python生成随机红包的实例写法
Sep 02 Python
Python之Sklearn使用入门教程
Feb 19 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下删除7天前日志的代码(php+shell)
2011/01/02 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
Vue如何引入远程JS文件
2017/04/20 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
Python实现发送与接收邮件的方法详解
2018/03/28 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
2014年感恩母亲演讲稿
2014/05/27 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
小学运动会开幕词
2015/01/28 职场文书
食品卫生管理制度
2015/08/06 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle