paramiko是python的SSH库,可用来连接远程linux主机,然后执行linux命令或者通过SFTP传输文件。

关于使用paramiko执行远程主机命令可以找到很多参考资料了,本文在此基础上做一些封装,便于扩展与编写脚本。

下面直接给出代码:

# 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, 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)

# 回显很长的命令可能执行较久,通过循环分批次取回回显

while True:

sleep(0.5)

ret = self.chan.recv(65535)

ret = ret.decode('utf-8')

result += ret

if p.search(ret):

print result

return result

下面进行测试:

# 主机IP错误,无法连接的情况

if __name__ == '__main__':

host = Linux('192.168.180.12', 'root', 'xxxx')

host.connect()

6 host.send('ls -l')

host.close()

按 Ctrl+C 复制代码按 Ctrl+C 复制代码

连接192.168.180.12失败,进行重试

连接192.168.180.12失败,进行重试

连接192.168.180.12失败,进行重试

重试3次失败,结束程序

Process finished with exit code 1

# 链接正常的情况

if __name__ == '__main__':

host = Linux('192.168.180.128', 'root', 'love')

host.connect()

host.send('ls -l')

host.close()

运行结果:

连接192.168.180.128成功

Last login: Sat May 21 07:25:39 2016 from 192.168.180.1

Have a lot of fun...

ls -l

192:~ # ls -l

total 28

-rw------- 1 root root 18 May 21 07:17 .bash_history

drwxr-xr-x 1 root root 28 May 21 06:02 .config

drwx------ 1 root root 22 May 21 05:57 .dbus

drwx------ 1 root root 0 Sep 25 2014 .gnupg

drwxr-xr-x 1 root root 10 May 21 06:15 .local

-rw------- 1 root root 55 May 21 06:03 .xauth5mesuo

-rw------- 1 root root 55 May 21 07:22 .xauthEYqDmK

-rw------- 1 root root 55 May 21 07:25 .xauthGTrohO

-rw------- 1 root root 55 May 21 07:09 .xauthP90TnG

-rw------- 1 root root 48 May 21 07:40 .xauthjW8pI9

-rw------- 1 root root 48 May 21 07:40 .xauthx8T4ED

drwxr-xr-x 1 root root 0 Sep 25 2014 bin

drwxr-xr-x 1 root root 38 May 21 05:43 inst-sys

192:~ #

Process finished with exit code 0

以上这篇基于使用paramiko执行远程linux主机命令(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持找一找教程网。

python远程linux服务器执行命令_基于使用paramiko执行远程linux主机命令(详解)相关推荐

  1. python pptx库中文文档_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

  2. python pptx教学_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

  3. python cv2 轮廓的包络 面积_Python 基于FIR实现Hilbert滤波器求信号包络详解

    在通信领域,可以通过希尔伯特变换求解解析信号,进而求解窄带信号的包络. 实现希尔伯特变换有两种方法,一种是对信号做FFT,单后只保留单边频谱,在做IFFT,我们称之为频域方法:另一种是基于FIR根据传 ...

  4. java里的进制转换函数_基于Java中进制的转换函数详解

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  5. usb打印机命令_打印机脱机怎么办 打印机脱机解决方法【详解】

    打印机是目前各个 办公室 中较常见的一类办公设备,可以用来打印工作中各种需要的文件与资料.一般情况下,打印机在一天内要被使用好多次,因此出现脱机情况是在所难免的.那么下面这篇文章小编就给大家说说打印机 ...

  6. python 源代码 macd双底 高 低_久其软件怎么样MACD指标的双底形态特征详解

    牛市,月收益不足40%的联系我 首页 置顶文章 是我的个人介绍 想合作的可以去看看 股票,基金是一回事 期货,还没接触 --------------------- 久其软件怎么样 RSI是衡量买卖双方 ...

  7. 服务器放在机柜_服务器机柜怎么布线 如何做好机柜整理【详解】

    [服务器机柜布置]服务器机柜布线 如何做好机柜整理 1. 前期准备 首先要通知用户在不影响用户正常工作的情况下进行整理机柜. 然后根据网络的拓扑结构.现有的设备情况.用户数量.用户分组等多种因素勾画出 ...

  8. 在Linux服务器运行jar包并一直处于后台执行

    在Linux服务器运行jar包并一直处于后台执行: 一.一般情况 jar包在linux的目录为 /jarmanager/xxx.jar 使用在/jarmanager目录下使用 java -jar xx ...

  9. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

最新文章

  1. Keil C语言数据类型,KeilC的指针类型
  2. java 枚举使用简书_Java枚举
  3. 使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段
  4. [js对象]JS入门之Global对象
  5. ES 的分布式架构原理能说一下么?
  6. linux下 命令 实验,实验一:Linux命令实验
  7. 【转】ORACLE中的子查询 ---OCP--047--46
  8. 【参考】微信 - 数据库 -官方封装接口说明:
  9. 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器
  10. mysql delete 数据之后 .MYD文件大小没有发生变化
  11. messagehub讲解,如何获取MessageHub的其余管理API的API密钥?
  12. asp.net FindControl作用
  13. 淘宝最新签名算法分析(1)
  14. 【POJ3525】Most Distant Point from the Sea(半平面交+二分+直线平移)
  15. 2022年计算机二级考试C语言程序设计冲刺题及答案
  16. 雾霾天气下运动目标检测技术MATLAB
  17. 实战项目 — 爬取中国票房网年度电影信息并保存在csv
  18. 卷积神经网络感受野的计算
  19. “有幸笔墨是小舟 任我自在游”在林曦的小世界里每日滋养自己
  20. 微信支付分 - 查询支付分订单API

热门文章

  1. 运行Lattice Diamond时报错 License checkout failed的解决方法
  2. Quartus中Tools->Netlist Viewers->RTL Viewer
  3. 【转】C#使用GDI+制作背景颜色淡入淡出效果的按钮
  4. redmine 自己定义字段mysql表结构
  5. Java if/else switchswitch
  6. [转]Android 导入v7包常见错误,以及项目引用v7包错误解决
  7. 软件外包项目实施过程中的关键因素(摘自IT168技术频道)
  8. [转载] Python字典按照keys排序输出为列表
  9. [转载] java调用c++的dll及java.lang.UnsatisfiedLinkError解决方法
  10. MongoDB学习day10--数据库导入导出