python远程linux服务器执行命令_基于使用paramiko执行远程linux主机命令(详解)
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主机命令(详解)相关推荐
- python pptx库中文文档_基于python-pptx库中文文档及使用详解
个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...
- python pptx教学_基于python-pptx库中文文档及使用详解
个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...
- python cv2 轮廓的包络 面积_Python 基于FIR实现Hilbert滤波器求信号包络详解
在通信领域,可以通过希尔伯特变换求解解析信号,进而求解窄带信号的包络. 实现希尔伯特变换有两种方法,一种是对信号做FFT,单后只保留单边频谱,在做IFFT,我们称之为频域方法:另一种是基于FIR根据传 ...
- java里的进制转换函数_基于Java中进制的转换函数详解
十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...
- usb打印机命令_打印机脱机怎么办 打印机脱机解决方法【详解】
打印机是目前各个 办公室 中较常见的一类办公设备,可以用来打印工作中各种需要的文件与资料.一般情况下,打印机在一天内要被使用好多次,因此出现脱机情况是在所难免的.那么下面这篇文章小编就给大家说说打印机 ...
- python 源代码 macd双底 高 低_久其软件怎么样MACD指标的双底形态特征详解
牛市,月收益不足40%的联系我 首页 置顶文章 是我的个人介绍 想合作的可以去看看 股票,基金是一回事 期货,还没接触 --------------------- 久其软件怎么样 RSI是衡量买卖双方 ...
- 服务器放在机柜_服务器机柜怎么布线 如何做好机柜整理【详解】
[服务器机柜布置]服务器机柜布线 如何做好机柜整理 1. 前期准备 首先要通知用户在不影响用户正常工作的情况下进行整理机柜. 然后根据网络的拓扑结构.现有的设备情况.用户数量.用户分组等多种因素勾画出 ...
- 在Linux服务器运行jar包并一直处于后台执行
在Linux服务器运行jar包并一直处于后台执行: 一.一般情况 jar包在linux的目录为 /jarmanager/xxx.jar 使用在/jarmanager目录下使用 java -jar xx ...
- python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解
最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...
最新文章
- Keil C语言数据类型,KeilC的指针类型
- java 枚举使用简书_Java枚举
- 使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段
- [js对象]JS入门之Global对象
- ES 的分布式架构原理能说一下么?
- linux下 命令 实验,实验一:Linux命令实验
- 【转】ORACLE中的子查询 ---OCP--047--46
- 【参考】微信 - 数据库 -官方封装接口说明:
- 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器
- mysql delete 数据之后 .MYD文件大小没有发生变化
- messagehub讲解,如何获取MessageHub的其余管理API的API密钥?
- asp.net FindControl作用
- 淘宝最新签名算法分析(1)
- 【POJ3525】Most Distant Point from the Sea(半平面交+二分+直线平移)
- 2022年计算机二级考试C语言程序设计冲刺题及答案
- 雾霾天气下运动目标检测技术MATLAB
- 实战项目 — 爬取中国票房网年度电影信息并保存在csv
- 卷积神经网络感受野的计算
- “有幸笔墨是小舟 任我自在游”在林曦的小世界里每日滋养自己
- 微信支付分 - 查询支付分订单API
热门文章
- 运行Lattice Diamond时报错 License checkout failed的解决方法
- Quartus中Tools->Netlist Viewers->RTL Viewer
- 【转】C#使用GDI+制作背景颜色淡入淡出效果的按钮
- redmine 自己定义字段mysql表结构
- Java if/else switchswitch
- [转]Android 导入v7包常见错误,以及项目引用v7包错误解决
- 软件外包项目实施过程中的关键因素(摘自IT168技术频道)
- [转载] Python字典按照keys排序输出为列表
- [转载] java调用c++的dll及java.lang.UnsatisfiedLinkError解决方法
- MongoDB学习day10--数据库导入导出