paramiko模块,基于SSH用于连接远程服务器并执行相关操作。

一、安装

  1. pip3 install paramiko

二、使用

SSHClient

用于连接远程服务器并执行基本命令

基于用户名密码连接:
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. # Author: DBQ(Du Baoqiang)
  4.  
  5. import paramiko
  6.  
  7. #创建ssh对象
  8.  
  9. ssh = paramiko.SSHClient()
  10.  
  11. #允许连接不在Know_hosts文件中的主机
  12. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  13.  
  14. #连接服务器
  15. ssh.connect(hostname='192.168.1.103',port=22,username='root',password='')
  16.  
  17. #执行命令
  18. stdin,stdout,stderr = ssh.exec_command('ls /tmp/')
  19.  
  20. #获取执行结果
  21. result = stdout.read()
  22.  
  23. print(result.decode()) #返回的是bytes
  24.  
  25. #关闭连接
  26. ssh.close()
  27.  
  28. 复制代码
基于公钥密钥连接:
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # auth : pangguoping
  4.  
  5. import paramiko
  6.  
  7. private_key = paramiko.RSAKey.from_private_key_file('/Users/daniel/.ssh/id_rsa')
  8.  
  9. # 创建SSH对象
  10. ssh = paramiko.SSHClient()
  11. # 允许连接不在know_hosts文件中的主机
  12. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  13. # 连接服务器
  14. ssh.connect(hostname='192.168.1.103', port=22, username='root', pkey=private_key)
  15.  
  16. # 执行命令
  17. stdin, stdout, stderr = ssh.exec_command('df')
  18. # 获取命令结果
  19. result = stdout.read()
  20. print(result.decode())
  21. # 关闭连接
  22. ssh.close()

SFTPClient

用于连接远程服务器并执行上传下载

基于用户名密码 上传/下载
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import paramiko
  5.  
  6. transport = paramiko.Transport(('192.168.1.103',22))
  7. transport.connect(username='root',password='')
  8.  
  9. sftp = paramiko.SFTPClient.from_transport(transport)
  10.  
  11. #上传本地文件/Users/daniel/test/zhoulibo.mp4 上传到服务器的 /tmp/test.mp4
  12. sftp.put('/Users/daniel/test/test.mp4','/tmp/test.mp4')
  13.  
  14. #将远端/tmp/zhoulibo.mp4 下载到 本地 /Users/daniel/test.mp4
  15. sftp.get('/tmp/zhoulibo.mp4','/Users/daniel/test.mp4')
  16.  
  17. transport.close()
基于公钥/密钥的上传/下载:
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import paramiko
  5.  
  6. private_key = paramiko.RSAKey.from_private_key_file('/Users/daniel/.ssh/id_rsa')
  7.  
  8. transport = paramiko.Transport(('192.168.1.103',22))
  9. transport.connect(username='root',pkey=private_key)
  10.  
  11. sftp = paramiko.SFTPClient.from_transport(transport)
  12.  
  13. #上传本地文件/Users/daniel/test/tt.mp4 上传到服务器的 /tmp/tt.mp4
  14. sftp.put('/Users/daniel/test/tt.mp4','/tmp/tt.mp4')
  15.  
  16. #将远端/tmp/tt.mp4 下载到 本地 /Users/daniel/tt.mp4
  17. sftp.get('/tmp/tt.mp4','/Users/daniel/tt.mp4')
  18.  
  19. transport.close()
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. import paramiko,uuid
  5.  
  6. class SSHConnection:
  7.  
  8. def __init__(self,host='192.168.1.103',port=22,username='root',pwd=''):
  9. self.host = host
  10. self.port = port
  11. self.username = username
  12. self.pwd = pwd
  13. self.__k = None
  14.  
  15. def create_file(self):
  16. file_name = str(uuid.uuid4()) #生成一个'46cad739-5937-4312-9156-00753b272581'的文件名 uuid并转换成str
  17. with open(file_name,'w') as f: #打开文件,往里面写一个sb
  18. f.write('sb')
  19. return file_name
  20.  
  21. def run(self):
  22. '''
  23. 主方法
  24. :return:
  25. '''
  26. self.connect()
  27. self.upload('/tmp/test.py') #调用upload方法,上传到服务器的/tmp/test.py
  28. self.rename('/tmp/test.py','/tmp/sb.py') #改名为sb.py
  29. self.close()
  30.  
  31. def connect(self):
  32. '''
  33. 建立连接
  34. :return:
  35. '''
  36. transport = paramiko.Transport((self.host,self.port))
  37. transport.connect(username=self.username,password=self.pwd)
  38. self.__transport = transport
  39.  
  40. def close(self):
  41. '''
  42. 关闭连接
  43. :return:
  44. '''
  45. self.__transport.close()
  46.  
  47. def upload(self,target_path):
  48. '''
  49. 连接,上传
  50. :param target_path:
  51. :return:
  52. '''
  53. file_name = self.create_file()
  54. sftp = paramiko.SFTPClient.from_transport(self.__transport)
  55. #上传本地文件 到服务器的 test.py
  56. sftp.put(file_name, target_path)
  57.  
  58. def rename(self, old_path, new_path):
  59. '''
  60. 改名, 把/tmp/test.py 改名为 sb.py
  61. :param old_path:
  62. :param new_path:
  63. :return:
  64. '''
  65. ssh = paramiko.SSHClient()
  66. ssh._transport = self.__transport
  67. #执行命令
  68. cmd = "mv %s %s" %(old_path,new_path)
  69. stdin,stdout,stderr = ssh.exec_command(cmd)
  70. res = stdout.read()
  71.  
  72. def cmd(self,command):
  73. '''
  74. 可以执行其他命令
  75. :param command:
  76. :return:
  77. '''
  78. self.connect()
  79. ssh = paramiko.SSHClient()
  80. ssh._transport = self.__transport
  81. #执行命令
  82. stdin, stdout, stderr = ssh.exec_command(command)
  83. res = stdout.read()
  84. self.close()
  85. return res
  86.  
  87. ha = SSHConnection()
  88.  
  89. ha.run()
  90. res = ha.cmd('ls')
  91. print(res.decode())

demo

python 之 Paramiko学习的更多相关文章

  1. Python之paramiko模块和SQL连接API

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: i ...

  2. python 之 paramiko

    """ 对app进行一些路由设置 """ """ 对socketio进行一些监听设置 "" ...

  3. Python 应用领域及学习重点

    笔者认为不管学习什么编程语言,首先要知道:学完之后在未来能做些什么? 本文将浅谈 Python 的应用领域及其在对应领域的学习重点.也仅是介绍了 Python 应用领域的"冰山一角" ...

  4. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  5. python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改

    python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...

  6. 如何进行服务器的批量管理以及python 的paramiko的模块

    最近对公司的通道机账号进行改造管理,全面的更加深入的理解了公司账号管理的架构.(注:基本上所有的机器上的ssh不能使用,只有部分机器能够使用.为了安全的角度考虑,安装的不是公版的ssh,而都是定制版的 ...

  7. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

  8. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...

  9. Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习

    http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...

随机推荐

  1. Tree( 树) 组件[2]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 异步加载如果想从数据库里获取导航内容, 那么就必须 ...

  2. sqlserver中的序列

    序列是由用户定义的绑定到架构的对象.序列依据定义的间隔按升序或降序生成,并可配置为用尽时重新启动(循环).序列不与特定表关联.序列与表之间的关系由应用程序进行控制. 创建序列的语法: CREATE S ...

  3. <httpProtocol/>配置http协议头

    Web.Config中的位置 <configuration> <system.webServer> <httpProtocol> <!--http协议内容-- ...

  4. windows server 2003 AD

    本文转载:http://www.cnblogs.com/zfanlong1314/admin/EditPosts.aspx?opt=1 今天教大家用windows server2003系统建立Acti ...

  5. 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3

    Problem Description 求Sn=2+22+222+…+22…222(有n个2)的值. 例如:2+22+222+2222+22222(n=5),n由键盘输入. Input n Outpu ...

  6. GDI相关基础知识

    原文链接:http://blog.csdn.net/poem_qianmo/article/details/7333886 GDI(Graphics Device Interface) 图形设备接口, ...

  7. php测试题整理(0519)

    1.B/S架构和C/S架构: B/S架构是依托于浏览器的网络系统,C/S架构是基于客户端的. B/S架构: 随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放.互 ...

  8. Flask学习记录之Flask-Migrate

    一.配置Flask-Migrate from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第 ...

  9. iOS开发之Runtime函数

    1.可以通过NSObject的一些方法获取运行时信息或动态执行一些消息: 1./*Returns a Boolean value that indicates whether the receivin ...

  10. ScrollView嵌套listview 时根据内容动态设置listview高度

    public static void setListViewHeightBasedOnChilds(ListView listView){ ListAdapter listAdapter = list ...