zoukankan      html  css  js  c++  java
  • python之paramiko模块

    一:简介

    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。

    由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。

    举个常见的例子,现有这样的需求:需要使用windows客户端,远程连接到Linux服务器,查看上面的日志状态,大家通常使用的方法会是:

    1:用telnet

    2:用PUTTY

    3:用WinSCP

    4:用XManager等…

    那现在如果需求又增加一条,要从服务器上下载文件,该怎么办?那常用的办法可能会是:

    1:Linux上安装FTP并配置

    2:Linux上安装Sambe并配置…

    大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。

    使用paramiko可以很好的解决以上问题,比起前面的方法,它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。

    二:安装

    安装paramiko有两个先决条件,python和另外一个名为PyCrypto的模块。

      通常安装标准的python模块,只需要在模块的根目录下运行:

    python setup.py build

    python setup.py install

    备注:安装前先检查是否安装gcc(yum -y install gcc)

    2.1 PyCrypto安装

    wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz

    tar -zxvf pycrypto-2.6.tar.gz

    cd pycrypto-2.6/

    python setup.py build && python setup.py install

      测试:

    python>> import Crypto

      (编译时报错:error: command 'gcc' failed with exit status 1;这是因为缺少python-dev的软件包,所yum -y install python-devel)

    2.2 paramiko安装

    wget http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz

    tar xvzf paramiko-1.7.7.1.tar.gz

    cd paramiko-1.7.7.1/

    python setup.py build && python setup.py install

    Crypto error: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

      测试:

    python>> import paramiko

      (Crypto error: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

      找到 /usr/lib/python2.7/site-packages/Crypto/Util/number.py

      把if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:

      注释了

      #if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:

      )

    三: 使用paramiko

    #设置ssh连接的远程主机地址和端口
    t=paramiko.Transport((ip,port))
    #设置登录名和密码
    t.connect(username=username,password=password)
    #连接成功后打开一个channel
    chan=t.open_session()
    #设置会话超时时间
    chan.settimeout(session_timeout)
    #打开远程的terminal
    chan.get_pty()
    #激活terminal
    chan.invoke_shell()
    然后就可以通过chan.send('command')和chan.recv(recv_buffer)来远程执行命令以及本地获取反馈。

    paramiko有两个模块SSHClient()和SFTPClient()

    利用SSHClient()

    1 import paramiko
    2 ssh = paramiko.SSHClient()
    3 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    4 ssh.connect(hostname='192.168.1.121',port=22,username='root',password='root11')
    5 stdin,stdout,stderr=ssh.exec_command('df -h')
    6 result = stdout.read()
    7 print (result)
    8 ssh.close()
    View Code

    在这里自己有个小坑,我测试时把自己的测试脚本的名称与模块名称一样了,这样会产生意想不到的错误,因为py调用库的顺序是先找程序所在目录的。删除当前目录下的paramiko.pyc,把自己的脚本重命名即可

    四,与linux连接

    下面是两种使用paramiko连接到linux服务器的代码

    方式一:

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

    方式二:

    1 t = paramiko.Transport((“主机”,”端口”))
    2 t.connect(username = “用户名”, password = “口令”)

    SFTPClient()也是使用transport来实现的,因此如果有需求需要执行命令和上传文件糅合在一起的话,那么就需要使用transport的方式来实现。

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

    t.connect(username = “用户名”, password = “口令”, hostkey=”密钥”)

    参考:https://www.cnblogs.com/qianyuliang/p/6433250.html
  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/magic-dw/p/13580102.html
Copyright © 2011-2022 走看看