返回顶部
首页 > 资讯 > 后端开发 > Python >python paramiko
  • 191
分享到

python paramiko

pythonparamiko 2023-01-31 07:01:09 191人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

Win7下Python2.7环境安装paramiko模块Win7下python2.7环境安装paramiko模块,有需要的朋友可以参考下近段时间用Python写一个小东西,每次修改代码后要手工上传到服务器,觉得很麻烦,虽然有WinSCP,找

Win7下Python2.7环境安装paramiko模块

Win7下python2.7环境安装paramiko模块,有需要的朋友可以参考下

近段时间用Python写一个小东西,每次修改代码后要手工上传到服务器,觉得很麻烦,虽然有WinSCP,找了一下资料,发现paramiko可以实现自动上传文件的功能,可惜的是,折腾了半天,在python3.3下没有成功,最后退而求其次安装了2.7才弄好,记录如下:

1.下载安装windows版本的Python2.7,我默认装在C:\Python27

2.下载PyCrypto2.6 for Python 2.7 64bit
地址为Http://www.voidspace.org.uk/python/modules.shtml#pycrypto
以管理员权限执行安装程序,一路Next即可

3.下载安装ecdsa-0.10.tar.gz,地址 https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.10.tar.gz 解压缩
进入安装目录,执行 C:\Python27\python setup.py install

4.下载paramiko压缩包
地址:https://pypi.python.org/packages/source/p/paramiko/paramiko-1.12.1.tar.gz

解压缩后从cmd进入解压缩目录,执行命令
C:\Python27\python setup.sh install

5.确认安装成功
在cmd中执行C:\Python27\python进入python环境
输入import paramiko无错误提示则表示安装成功

 

paramiko是用python语言写的一个模块,遵循ssh2协议,支持以加密和认证的方式,进行远程服务器的连接了,下面我们就来给各位一起验证一下python模块paramiko与ssh安装与使用示例吧。

一、paramiko模块的安装
paramiko模块依赖PyCrypto模块,而PyCrypto需要GCC库编译,不过一般发行版的源里带有该模块。这里以Centos6为例,直接借助以下命令可以直接完成安装:

 代码如下

复制代码

# yum install gcc python-crypto python-paramiko python-devel  -y 

windows版下可以安装windows版的GCC(MinGW),然后编辑安装pycrypto和paramiko ,下载安成后,直接运行python.exe setup.pybuild 和 python.exe setup.py install 就可以了。

二、paramiko的连接
使用paramiko模块有两种连接方式,一种是通过paramiko.SSHClient()函数,另外一种是通过paramiko.Transport()函数。

方法一:

 代码如下

复制代码

import paramiko
 ssh = paramiko.SSHClient()
 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 ssh.connect("某IP地址",22,"用户名", "口令")

上面的第二行代码的作用是允许连接不在know_hosts文件中的主机。

方法二:

 代码如下

复制代码

import paramiko
 t = paramiko.Transport(("主机","端口"))
 t.connect(username = "用户名", passWord = "口令")

如果连接远程主机需要提供密钥,上面第二行代码可改成:

 代码如下

复制代码

t.connect(username = "用户名", password = "口令",  hosTKEy="密钥")

三、paramiko ssh连接
以下是一个简单的通过paramiko模块定义的ssh连接并执行命令的函数,如下:

 代码如下

复制代码

#!/usr/bin/python
 #-*- coding: utf-8 -*-
 import paramiko
 #paramiko.util.log_to_file('/tmp/sshout')
 def ssh2(ip,username,passwd,cmd):
     try:
         ssh = paramiko.SSHClient()
          ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
          ssh.connect(ip,22,username,passwd,timeout=5)
         stdin,stdout,stderr =  ssh.exec_command(cmd)
 #            stdin.write("Y")   #简单交互,输入 ‘Y’
         print stdout.read()
 #        for x in   stdout.readlines():
 #          print x.strip("\n")
         print '%s\tOK\n'%(ip)
         ssh.close()
     except :
         print '%s\tError\n'%(ip)
 ssh2("192.168.0.102","root","361way","hostname;ifconfig")
 ssh2("192.168.0.107","root","123456","ifconfig")

其中第四行的日志部分,是记录ssh连接交互时的一些信息,可以看做是类似于debug的输出,一般情况下不需要开启。

stdin.write部分是用于交互情况下,通过该命令可以执行交互。注意这里可能会引起歧义,这里的交互并不是ssh连接过程中出现的让输入 yes的交互,因为paramiko模块在连接过程中会自动处理好yes确认。这里的交互是指后面的cmd需要的执行的程序可能出现交互的情况下,可以通 过该参数进行交互。

stdout标准输出,在输出内容比较少时,可以通过直接使用read读取出所有的输出;但在输出内容比较多时,建议通过按行读取进行处理。不过按行读取时,每行结尾会有换行符\n,这样输出的结果很不美观。可以通过strip进行字符串的处理。

在函数调用过程中需要注意的是,IP、username、passwd都是属于字符串型的,所以需要加引号。后面执行的cmd,如果有多个命令需要操作时,需要通过分号进行分割。

四、paramiko sftp示例
单个文件小传下载的示例:

 代码如下

复制代码

import paramiko
 #建立一个加密的管道
 scp=paramiko.Transport(('192.168.0.102',22))
 #建立连接
 scp.connect(username='root',password='361way')
 #建立一个sftp客户端对象,通过ssh  transport操作远程文件
 sftp=paramiko.SFTPClient.from_transport(scp)
 #Copy a remote file (remotepath) from the SFTP server to the local host
 sftp.get('/root/testfile','/tmp/361way')
 #Copy a local file (localpath) to the SFTP server as remotepath
 sftp.put('/root/crash-6.1.6.tar.gz','/tmp/crash-6.1.6.tar.gz')
 scp.close()

一个目录下多个文件上传下载的示例:

 代码如下

复制代码

#!/usr/bin/env python
 #-*- coding: utf-8 -*-
 import paramiko,datetime,os
 hostname='192.168.0.102'
 username='root'
 password='361way'
 port=22
 local_dir='/tmp/getfile'
 remote_dir='/tmp/abc'
 try:
     t=paramiko.Transport((hostname,port))
     t.connect(username=username,password=password)
     sftp=paramiko.SFTPClient.from_transport(t)
     #files=sftp.listdir(dir_path)
     files=sftp.listdir(remote_dir)
     for f in files:
         print ''
         print  '#########################################'
         print 'Beginning to download  file  from %s  %s ' % (hostname,datetime.datetime.now())
         print 'Downloading  file:',os.path.join(remote_dir,f)
          sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))#下载
          #sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f))#上传
         print 'Download file success %s '  % datetime.datetime.now()
         print ''
         print  '##########################################'
     t.close()
 except Exception:
        print "connect error!" 

注:本处的目录下所有文件进行下载或上传的示例中,在遇到目录下还有嵌套的目录存在时,会将目录也当做文件进行处理,所以如果想要更加的完美的话,可以通过引入stat模块下的S_ISDIR方法进行处理

paramiko.transport对象也支持以Socket的方式进行连接,如下示例:

 代码如下

复制代码

import paramiko
 transport = paramiko.Transport(('localhost',22))
 transport.connect(username='root', password = 'password')
 sftp = paramiko.SFTPClient.from_transport(transport)
 sftp.get(remotefile,localfile)
 #如果是上传则用:
 #sftp.put(localfile, remotefile)
 transport.close()
 #用socket连接
 tcpsock =  socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 tcpsock.settimeout(5)
 tcpsock.connect((ip,22),)
 ssh = paramiko.Transport(tcpsock)
 ssh.connect(username=user,password=password)
 sftpConnect=paramiko.SFTPClient.from_transport(ssh)

五、利用paramiko实现ssh的交互式连接
以下是通过paramiko模块直接用ssh协议登陆到远程服务器的操作代码,这里先定义一个interactive模块,代码如下:

 代码如下

复制代码

import socket
 import sys
 # windows does not have termiOS...
 try:
     import termios
     import tty
     has_termios = True
 except ImportError:
     has_termios = False
 def interactive_shell(chan):
     if has_termios:
         posix_shell(chan)
     else:
         windows_shell(chan)
 def posix_shell(chan):
     import select
     oldtty = termios.tcgetattr(sys.stdin)
     try:
         tty.setraw(sys.stdin.fileno())
         tty.setcbreak(sys.stdin.fileno())
         chan.settimeout(0.0)
         while True:
             r, w, e =  select.select([chan, sys.stdin], [], [])
             if chan in  r:
                  try:
                      x = chan.recv(1024)
                      if len(x) == 0:
                          print '\r\n*** EOF\r\n',
                          break
                      sys.stdout.write(x)
                      sys.stdout.flush()
                  except socket.timeout:
                      pass
             if  sys.stdin in r:
                  x = sys.stdin.read(1)
                  if len(x) == 0:
                      break
                  chan.send(x)
     finally:
         termios.tcsetattr(sys.stdin,  termios.TCSADRaiN, oldtty)
 # thanks to Mike Looijmans for this code
 def windows_shell(chan):
     import threading
     sys.stdout.write("Line-buffered terminal emulation.  Press F6 or ^Z to send EOF.\r\n\r\n")
     def writeall(sock):
         while True:
             data =  sock.recv(256)
             if not  data:
                  sys.stdout.write('\r\n*** EOF  ***\r\n\r\n')
                  sys.stdout.flush()
                  break
              sys.stdout.write(data)
              sys.stdout.flush()
     writer = threading.Thread(target=writeall, args=(chan,))
     writer.start()
     try:
         while True:
             d =  sys.stdin.read(1)
             if not d:
                  break
              chan.send(d)
     except EOFError:
         # user hit ^Z or F6
         pass

代码内容可以从paramiko 在GitHub项目上的demo里获取。再另外写一个ssh_inter.py的交互主程序,内容如下:

 代码如下

复制代码

import paramiko
 import interactive
 #记录日志
 paramiko.util.log_to_file('/tmp/test')
 #建立ssh连接
 ssh=paramiko.SSHClient()
 ssh.load_system_host_keys()
 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 ssh.connect('192.168.0.102',port=22,username='root',password='xxxxxx',compress=True)
 #建立交互式shell连接
 channel=ssh.invoke_shell()
 #建立交互式管道
 interactive.interactive_shell(channel)
 #关闭连接
 channel.close()
 ssh.close()

执行效果就像我们平时直接使用ssh登录一样。

六、总结
paramiko模块是一个比较强大的ssh连接模块,以上的示例只是列出了该模块的一些简单的使用方法,还可以使用threading模块加块程序并发 的速度;也可以使用configparser模块处理配置文件,而我们将所有IP、用户信息操作都放入配置文件;使用setproctitle模块为执行 的程序加一个容易区分的title等。

同样,虽然连fabric这样大名鼎鼎的软件使用的ssh都是用paramiko模块进行的封装,不过你依然可以选择不使用它,你也可以选择pexpect模块实现封装一个简易的ssh连接工具、或者使用同样比较火的salt-ssh模块。

paramiko模块是基于Python实现的ssh远程安全链接,实现命令远程、文件传输、SSH代理等功能。本文详细介绍了paramiko模块常用的方法,且实用价值非常高,稍作修改就能做出一个实用的运维工具。

 

安装

letong@me:~$ sudo pip install paramiko

 

简单的远程执行命令实例

#!/usr/bin/env python
import paramiko
hostname='127.0.0.1'
username='root'
password='123456'
port=2222
 
ssh=paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin,stdout,stderr=ssh.exec_command('ls /')
print stdout.read()
ssh.close()

 

SSHClient类

SSHClient类是SSH服务会话的高级表示,封装了传输、通道以及SFTPClient的校验、建立方法,通常用于执行命令。

connect方法

connect(self, hostname, port=22, username=None,password=None, pkey=None, Key_filename=None, timeout=None, allow_agent=True,look_for_keys=True, compress=False)

参数说明:

hostname,连接目标的主机地址
port,连接目标的端口,默认22
username,用户名
password,用户密码
pkey,私钥方式用户验证
key_filename,私钥文件名
timeout,超时时间
allow_agent,是否允许ssh代理
look_for_keys,是否允许搜索私钥文件
compress,打开时是否压缩

 

exec_command方法

exec_command(self, command, bufzise=-1)

参数说明:

command,执行的命令
bufsize,文件缓冲区大小,-1不限制

 

load_system_host_keys方法

load_system_host_keys(self, filename=None)

参数说明:

filename,指定远程主机公钥文件

 

set_missing_host_key_policy方法

ssh=paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

参数说明:

AutoAddPolicy,自动添加主机名及密钥到本地并保存,不依赖load_system_host_keys()配置
RejectPolicy,自动拒绝未知主机名和密钥,依赖load_system_host_keys()配置
WarnningPolicy,功能与AutoAddPolicy相同,但是未知主机会报警

 

SFTPClient类

根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作。

from_transport方法

from_transport(cls, t)

参数说明:

t,一个已通过验证的传输对象

例:

>>> import paramiko
>>> a = paramiko.Transport((“127.0.0.1″,2222))
>>> a.connect(username=”root”, password=’123456′)
>>> sftp = paramiko.SFTPClient.from_transport(a)

 

put方法

put(self, localpath, remotepath, callback=None,confirm=True)

参数说明:

localpath,上传源文件的本地路径
remotepath,目标路径
callback,获取接收与总传输字节数
confirm,上传完毕后是否调用stat()方法,以便确认文件大小

例:

>>> localpath=’ftp-test.log’
>>> remotepath=’/data/ftp-test.log’
>>> sftp.put(localpath,remotepath)

 

get方法

get(self, remotepath, localpath, callback=None)

参数说明:

remotepath,需要下载的远程文件
localpath,本地存储路径
callback,同put方法

 

其他方法

mkdir,用于创建目录
remove,删除目录
rename,重命名
stat,获取文件信息
listdir,获取目录列表

 

 


--结束END--

本文标题: python paramiko

本文链接: https://lsjlt.com/news/191226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python paramiko
    Win7下Python2.7环境安装paramiko模块Win7下Python2.7环境安装paramiko模块,有需要的朋友可以参考下近段时间用Python写一个小东西,每次修改代码后要手工上传到服务器,觉得很麻烦,虽然有WinSCP,找...
    99+
    2023-01-31
    python paramiko
  • 【python】--paramiko 连
    在使用AWS(亚马逊)的云机器, AWS 管理面板中生成密钥。使用python的Paramiko 连接服务器import paramiko k = paramiko.RSAKey.from_private_key_file("/home/e...
    99+
    2023-01-31
    python paramiko
  • python paramiko模块
        paramiko模块是python中很重要的模块,他的功能呢主要分为两大块功能。一个是模拟SSH功能登录到远程主机上执行命令。一个是模拟SFTP功能传输文件。paramiko支持密码登陆方式和免密码的私钥登录方式。密码登陆方式代码如...
    99+
    2023-01-31
    模块 python paramiko
  • python paramiko 使用
       python 下的paramiko功能很之强大。我们所熟悉的Ansible就是用paramiko编写。paramiko主要是通过ssh协议对远程主机的管理。比如:执行远程主机的CLI、上传和下载文件等。1.通过使用paramiko 远...
    99+
    2023-01-31
    python paramiko
  • python paramiko使用
     http://www.lag.net/paramiko/ Working with paramiko SSHClient is the main class provided by the paramkio mod...
    99+
    2023-01-31
    python paramiko
  • python脚本之paramiko
    #############################################################安装paramiko[root@LVS1 ~]# yum install gcc[root@LVS1 ~]#tar -...
    99+
    2023-01-31
    脚本 python paramiko
  • Python 之 paramiko 模块
    paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.安装#paramiko模块的安装需要先安装PyCrypto模块 wget https://pypi.python.or...
    99+
    2023-01-31
    模块 Python paramiko
  • python多线程paramiko
    初学python,网上找发些关于paramiko实现python多线程的功能,发现相互抄袭占多.别人的总归是别人的,也同时为了练习技术,就自己写了一个基于paramiko免密认证多线程并发脚本.与大家共勉.使用上的问题的同学也可以联系我.刚...
    99+
    2023-01-31
    多线程 python paramiko
  • python中paramiko的sftp
    from_transport(cls, t)从一个开放的L(传输)创建一个SFTP客户端通道close(self):关闭SFTP会话和它的底层通道def get_channel(self):为该SFTP会话返回底层L(通道)对象。这样可以对...
    99+
    2023-01-31
    python paramiko sftp
  • python的paramiko模块
      paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。  由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, ...
    99+
    2023-01-31
    模块 python paramiko
  • python模块paramiko与ssh
      paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连...
    99+
    2023-01-31
    模块 python ssh
  • python paramiko模块讲解
    Windows下有很多非常好的SSH客户端,比如Putty。在Python的世界里,你可以使用原始套接字和一些加密函数创建自己的SSH客户端或服务端,但如果有现成的模块,为什么还要自己实现呢。使用Paramiko库中的PyCrypto能够让...
    99+
    2023-01-31
    模块 python paramiko
  • Python paramiko模块(实现
    开发堡垒机之前,先来学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作 安装paramiko模块 pip3 install paramiko 基于用户密码方式 import paramiko # 创建...
    99+
    2023-01-31
    模块 Python paramiko
  • python paramiko 问题总结
     Working with paramiko SSHClient is the main class provided by the paramkio module. It provides the basic interface you ...
    99+
    2023-01-31
    python paramiko
  • python paramiko 执行命令
    参考http://wangwei007.blog.51cto.com/blog/68019/1058726http://youzao.blog.51cto.com/3946111/1348903在node1上想对node2执行命令,标准的答...
    99+
    2023-01-31
    命令 python paramiko
  • python paramiko模块的使
    一般使用paramiko的功能就是通过ssh远程执行命令,远程(上传、下载)传输文件等等依赖包:/usr/local/python27/bin/pip install pycrypto下载包 paramiko#wget http://en....
    99+
    2023-01-31
    模块 python paramiko
  • python手动安装paramiko
    TX云平台无法访问某些特定的外网,所以esay_install无法安装python模块在安装paramiko模块时需要安装pycrypto/data/soft/pycrypto-2.6 "python setup.py build" to ...
    99+
    2023-01-31
    python paramiko
  • python下paramiko模块ssh
        python下有个paramiko模块,这个模块可以实现ssh登录linux服务器,下面贴出代码,注意,我在centos5.6下,python2.6.5,paramiko-1.7的版本下测试成功。。。#!/usr/bin/env p...
    99+
    2023-01-31
    模块 python paramiko
  • python paramiko模块简介
    python paramiko模块简介一:简介    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。    由于使用的是python这样的能够跨平台运行的语言,所以所有py...
    99+
    2023-01-31
    模块 简介 python
  • Python学习—paramiko模块实
    paramiko模块 paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。 import paramiko # ssh root@ip # 创建一个ssh对象 ...
    99+
    2023-01-31
    模块 Python paramiko
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作