1.简单版

  1. # coding: utf-8
  2.  
  3. import paramiko
  4. import re
  5. from time import sleep
  6.  
  7. def ssh():
  8. ssh = paramiko.SSHClient()
  9. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #指定当对方主机没有本机公钥的情况时应该怎么办,AutoAddPolicy表示自动在对方主机保存下本机的秘钥
  10. ssh.connect('172.16.1.5',22,'linyouyi','') #SSH端口默认22,可改
  11. stdin,stdout,stderr = ssh.exec_command("df -hl") #这三个得到的都是类文件对象
  12. outmsg,errmsg = stdout.read(),stderr.read() #读一次之后,stdout和stderr里就没有内容了,所以一定要用变量把它们带的信息给保存下来,否则read一次之后就没有了
  13. #outmsg = str(outmsg)
  14. #print(outmsg.replace("\\n","\\r\\n"))
  15. print(outmsg.decode())
  16. print(errmsg)
  17. if errmsg == "":
  18. print(outmsg)
  19. ssh.close()
  20. if __name__ == '__main__':
  21. ssh()

2.封装版

  1. # coding: utf-8
  2.  
  3. import paramiko
  4. import re
  5. from time import sleep
  6.  
  7. # 定义一个类,表示一台远端linux主机
  8. class Linux(object):
  9. # 通过IP, 用户名,密码,超时时间初始化一个远程Linux主机
  10. def __init__(self, ip, username, password, timeout=30):
  11. self.ip = ip
  12. self.username = username
  13. self.password = password
  14. self.timeout = timeout
  15. # transport和chanel
  16. self.t = ''
  17. self.chan = ''
  18. # 链接失败的重试次数
  19. self.try_times = 3
  20.  
  21. # 调用该方法连接远程主机
  22. def connect(self):
  23. while True:
  24. # 连接过程中可能会抛出异常,比如网络不通、链接超时
  25. try:
  26. self.t = paramiko.Transport(sock=(self.ip, 22))
  27. self.t.connect(username=self.username, password=self.password)
  28. self.chan = self.t.open_session()
  29. self.chan.settimeout(self.timeout)
  30. self.chan.get_pty()
  31. self.chan.invoke_shell()
  32. # 如果没有抛出异常说明连接成功,直接返回
  33. print(u'连接%s成功' % self.ip)
  34. # 接收到的网络数据解码为str
  35. print(self.chan.recv(65535).decode('utf-8'))
  36. return
  37. # 这里不对可能的异常如socket.error, socket.timeout细化,直接一网打尽
  38. except Exception as e1:
  39. if self.try_times != 0:
  40. print(u'连接%s失败,进行重试' %self.ip)
  41. self.try_times -= 1
  42. else:
  43. print(u'重试3次失败,结束程序')
  44. exit(1)
  45.  
  46. # 断开连接
  47. def close(self):
  48. self.chan.close()
  49. self.t.close()
  50.  
  51. # 发送要执行的命令
  52. def send(self, cmd):
  53. cmd += '\r'
  54. # 通过命令执行提示符来判断命令是否执行完成
  55. p = re.compile(r']$')
  56.  
  57. result = ''
  58. # 发送要执行的命令
  59. self.chan.send(cmd)
  60. # 回显很长的命令可能执行较久,通过循环分批次取回回显
  61. while True:
  62. sleep(2)
  63. ret = self.chan.recv(65535)
  64. ret = ret.decode('utf-8')
  65. result += ret
  66. if p.search(ret):
  67. print(result)
  68. return(result)
  69.  
  70. if __name__ == '__main__':
  71. host = Linux('172.16.1.5', 'linyouyi', '')
  72. host.connect()
  73. host.send('ll')
  74. host.close()

python 远程执行命令的更多相关文章

  1. python 远程执行命令、上传、下载举例

    使用python中的 paramiko 实现远程操作,需要安装 paramiko 模块. # vi pssh.py #!/usr/bin/python #coding=utf-8 ''' Create ...

  2. python 远程执行命令、发布文件

    最近有个需求,想获取部分服务器上运行了那些应用服务,一台台去看,太费劲了,参考牛人写了此脚本,后期再加上一个前端页面做一些简单的运维维护的工作,凑合着先用着,待完善, 注:此脚本依懒于安装fabric ...

  3. python远程执行命令

    def run(): try: ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ...

  4. python之实现批量远程执行命令(堡垒机)

    python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对pytho ...

  5. Python之路 - Socket实现远程执行命令

    Python之路 - Socket实现远程执行命令 os模块实现

  6. 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件

    本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...

  7. Python Paramiko实现sftp文件上传下载以及远程执行命令

    一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...

  8. python 网络编程(远程执行命令与粘包)

    远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subpro ...

  9. 使用paramiko远程执行命令、下发文件

    写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...

随机推荐

  1. pip配置阿里云源

    Windows:打开计算机,在地址栏输入%appdata%,回车,进入用户文件夹,新建文件夹,命名为pip 在pip下新建pip.ini,输入以下内容 [global] timeout=6000ind ...

  2. robotframework+python3+selenium之web相关关键字---第二集

    1.F5可查看所有关键字,如图: 2.浏览器相关关键字: 2.1  Open Browser    https://www.baidu.com  chrome    # 打开浏览器,rf默认使用火狐浏 ...

  3. JavaWeb开发之二《JSP + Tomcat的第一个程序“Hello World”》

    搬以前写的博客[2014-12-10 22:41] 前一篇博客讲了Tomcat环境搭建,于是开始第一个“Hello JSP”程序. 服务器环境搭建好之后,我们开始写自己的网站,这里简单的写一个没有后台 ...

  4. 上传图片,预览并保存成blob类型 和 base64

    场景: 获取到一个file类型的图片,如果直接在html中预览?这里就是利用html5的新特性,将图片转换为Base64的形式显示出来.有两种方法: 方法一:利用URL.createObjectURL ...

  5. 【LeetCode 4】寻找两个有序数组的中位数

    题目链接 [题解] 假设在两个有序的序列中找第k小的数字. 那么我们先定位第一个序列中的第k/2个数字(不足则取最边上的那个数字)记下标为i1 然后定位第二个序列中的第k/2个数字(同样不足则取最边上 ...

  6. Android中ViewPgae中的Fragment如何确认当前页面可见的问题

    由于在ViewPage中PageAdapter来管理所有的Fragment.在加载一个Fragment的时候,会自动缓存左右几个(默认是一个)页面,此时也会调用到正常的生命周期函数,onCreate, ...

  7. kubernetes(k8s)集群安全机制RBAC

    1.基本概念 RBAC(Role-Based Access Control,基于角色的访问控制)在k8s v1.5中引入,在v1.6版本时升级为Beta版本,并成为kubeadm安装方式下的默认选项, ...

  8. Chrome 调试跨域问题解决方案之插件篇

    跨域,就是A域名下的js,想请求B域名下的接口数据.跨域,只存在于浏览器端.App和小程序不存在跨域问题.跨域,分浏览器策略和服务器策略. 如果服务器配置了允许跨域,那就没有跨域问题 如果uni-ap ...

  9. WebBug靶场基础篇 — 02

    本篇以第一人称记录这个关卡的第 1-5 关. 由于我记录的过程有点偏向于思考,所以截图截的多 = =!所以文章有点长... 下午一觉醒来,已经 4 点多了,然后开电脑,在虚拟机里,铺了铺靶场,但是毕竟 ...

  10. 第一个脚本 "Hello World!"

    打开记事本就可以编辑脚本,REM就相当于注释,和脚本语言一样 REM Hello World GUI r DELAY STRING notepad ENTER DELAY STRING Hello W ...