• 技术文章 >后端开发 >Python教程

    Windows系统下安装Python的SSH模块教程

    2016-06-06 11:21:15原创459
    Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypto模块,因此要在Python中使用SSH,则需要先安装模块顺序是:pycrypto -> ecdsa -> paramiko

    1、安装pyCrypto

    安装这个比较麻烦,需要本地编译,要装vs或gcc还有一堆配置,还不一定能编译成功。(网上能搜到安装步骤)
    建议直接下载已编译版: http://www.voidspace.org.uk/python/modules.shtml#pycrypto
    直接下载并安装既可。
    (注:crypto有java和C++版)

    2、安装ecdsa

    看很多博客没有提到这个库,但我执行paramiko时,提示找不到ecdsa模块。
    下载:https://pypi.python.org/pypi/ecdsa/0.9 ,解压到一个目录,目录中有一个setup.py。
    安装比较简单,windows下直接在刚才解压后的目录执行:python setup.py install

    3.安装paramiko

    与安装ecdsa类型,只是打开下载页面很慢。。。

    下载: https://github.com/paramiko/paramiko#,

    安装步骤同ecdsa

    注:1、所有另外安装的第三方库,如果不特指定安装后库目录的话,将默认保存到 %PYTHON_HOME%\Lib\site-packages下。

    2、python大小写敏感,对模块名也是。

    3、Crypto可以提供常见的加解密算法,如:RSA、RC4、DSA、DES

    测试代码:

    代码如下:


    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    # cp@chenpeng.info

    import paramiko

    def MAIN():

    host = “10.1.1.1″
    port = 22
    user = “root”
    pswd = “111222333″

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, port, user, pswd)
    stdin, stdout, stderr = ssh.exec_command(‘ifconfig')
    print stdout.read()
    ssh.close()
    #

    if __name__=='__main__':
    try:
    MAIN()
    except Exception,e:
    print e



    输出如下:

    目前主要用于批量执行多个服务器的ssh命令,批量维护比较方便。

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

    方式一:

    代码如下:


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


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

    方式二:

    代码如下:


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


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

    代码如下:


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


    例子:

    代码如下:


    #!/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()


    下载linux服务器上的文件

    代码如下:


    #!/usr/bin/python
    import paramiko

    t = paramiko.Transport(("主机","端口"))
    t.connect(username = "用户名", password = "口令")
    sftp = paramiko.SFTPClient.from_transport(t)
    remotepath='/var/log/system.log'
    localpath='/tmp/system.log'
    sftp.get(remotepath, localpath)
    t.close()


    上传文件到linux服务器

    代码如下:


    #!/usr/bin/python
    import paramiko

    t = paramiko.Transport(("主机","端口"))
    t.connect(username = "用户名", password = "口令")
    sftp = paramiko.SFTPClient.from_transport(t)
    remotepath='/var/log/system.log'
    localpath='/tmp/system.log'
    sftp.put(localpath,remotepath)
    t.close()

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Python中的引用和拷贝浅析 下一篇:Python中使用select模块实现非阻塞的IO
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 一文掌握Python返回函数、闭包、装饰器、偏函数• 【吐血整理】50道Python面试题大全及答案(收藏)• Python可视化总结之matplotlib.pyplot基本参数详解• python能代替JavaScript吗• Python详细解析之二分查找算法
    1/1

    PHP中文网