• Python Paramiko模块安装和使用


    1、简介

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

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

    2、安装

      安装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:

      )

    3、使用

    3.1 执行远程命令

    #!/usr/bin/python

    import paramiko

    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect("某IP地址",22,"用户名", "口令")

    stdin, stdout, stderr = ssh.exec_command("你的命令")

    print stdout.readlines()

    ssh.close()

    3.2 上传文件到远程

    #!/usr/bin/python

    import paramiko

    t = paramiko.Transport(("某IP地址",22))

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

    sftp = paramiko.SFTPClient.from_transport(t)

    remotepath='/tmp/test.txt'

    localpath='/tmp/test.txt'

    sftp.put(localpath,remotepath)

    t.close()

    3.3 从远程下载文件

    #!/usr/bin/python

    import paramiko

    t = paramiko.Transport(("某IP地址",22))

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

    sftp = paramiko.SFTPClient.from_transport(t)

    remotepath='/tmp/test.txt'

    localpath='/tmp/test.txt'

    sftp.get(remotepath, localpath)

    t.close()

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    转自 http://www.cnblogs.com/xia520pi/p/3805043.html
     
    下面是个人在安装过程中的一些补充:
    一些包上面的下载址已经不可用了,其他下载地址:
    PyCrypto2.6 for Python 2.7 64bit地址 http://www.voidspace.org.uk/python/modules.shtml#pycrypto
    paramiko压缩包地址:https://pypi.python.org/packages/source/p/paramiko/paramiko-1.12.1.tar.gz
     
    ecdsa 包也是paramiko所依赖的一模块,另外我在安装的过程中再遇到了找不到 zlib 的错误
    import zlib
    ImportError: No module named zlib
    我的服务器上已经安装了zlib,但python找不到 zlib,找到zlib,按下面方式重新编译python即可
     
    # rpm -ql zlib
    /lib64/libz.so.1
    /lib64/libz.so.1.2.3
    /usr/share/doc/zlib-1.2.3

    我的zlib是使用yum install zlib -y 方式安装的,即是使用rpm安装的,可通过这种方式找到其安装路径为

    /usr/share/doc/zlib-1.2.3

    重新编译安装python
    ./configure prefix=/opt/soft/python/ --with-zlib=/usr/share/doc/zlib-1.2.3
     make && make install

    然后再次安装paramiko

    python setup.py install

    经测试成功

    [root@bak ~]# python
    Python 2.7.9 (default, Apr  7 2016, 15:27:12) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import paramiko
    >>> 



     
     
     
  • 相关阅读:
    P3180 [HAOI2016]地图
    P2787 语文1(chin1)- 理理思维
    P2221 [HAOI2012]高速公路
    P4137 Rmq Problem / mex
    P3746 [六省联考2017]组合数问题
    P2461 [SDOI2008]递归数列
    P3715 [BJOI2017]魔法咒语
    P3195 [HNOI2008]玩具装箱TOY
    Linux下的strerror是否线程安全?
    bash/shell的字符串trim实现
  • 原文地址:https://www.cnblogs.com/perfei/p/5363504.html
Copyright © 2020-2023  润新知