添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
最近在测试服务器那块,看了下Paramiko模块,一直都是用FileZilla工具,想了想,持续集成,更新代码可以用Parmmiko完成,还是不错的

Paramiko是用python语言写的一个模块,远程连接到Linux服务器,查看上面的日志状态,批量配置远程服务器,文件上传,文件下载等

初始化一些参数:

host = "120.24.239.214"
port = 22
timeout = 30
user = "root"
password = "******"
    Paramiko远程执行linux命令:
# -*- coding:utf-8 -*-
import paramiko
def sftp_exec_command(command):
    try:
        ssh_client = paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(host, 22, user, password)
        std_in, std_out, std_err = ssh_client.exec_command(command)
        for line in std_out:
            print line.strip("\n")
        ssh_client.close()
    except Exception, e:
        print e
if __name__ == '__main__':
    sftp_exec_command("ls -l")
    Paramiko上传文件:
# -*- coding:utf-8 -*-
import paramiko
def sftp_upload_file(server_path, local_path):
    try:
        t = paramiko.Transport((host, 22))
        t.connect(username=user, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        sftp.put(local_path, server_path)
        t.close()
    except Exception, e:
        print e
if __name__ == '__main__':
    sftp_upload_file("/root/bug.txt", "D:/bug.txt")

    Paramiko下载文件:

    # -*- coding:utf-8 -*-
    import paramiko
    def sftp_down_file(server_path, local_path):
        try:
            t = paramiko.Transport((host, 22))
            t.connect(username=user, password=password)
            sftp = paramiko.SFTPClient.from_transport(t)
            sftp.get(server_path, local_path)
            t.close()
        except Exception, e:
            print e
    if __name__ == '__main__':
        sftp_down_file("/root/test.txt", "D:/text.txt")

      Python还有个默认的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件

      ftp相关命令操作:

      ftp.cwd(pathname)   #设置FTP当前操作的路径
      ftp.dir()   #显示目录下文件信息
      ftp.nlst()  #获取目录下的文件
      ftp.mkd(pathname)   #新建远程目录
      ftp.pwd()    #返回当前所在位置
      ftp.rmd(dirname)    #删除远程目录
      ftp.delete(filename)    #删除远程文件
      ftp.rename(fromname, toname)    #将fromname修改名称为toname。
      ftp.storbinaly("STOR filename.txt",file_handel,bufsize)     #上传目标文件
      ftp.retrbinary("RETR filename.txt",file_handel,bufsize)     #下载FTP文件

        一些小例子:

        # -*- coding:utf-8 -*-
        from ftplib import FTP, all_errors
        import paramiko
        import sys, os
        import getpass
        def ftp_main():
            try:
                f = FTP("ftp.ibiblio.org")
                print f.getwelcome()
                f.login()
                print f.pwd()
                f.quit()
            except Exception, e:
                print all_errors, e
        def ftp_down_file():
            try:
                f = FTP("ftp.kernel.org")
                f.login()
                f.cwd("/pub/linux/kernel/v1.0")
                fd = open("patch8.gz", "wb")
                # 以ASCII模式下载文件
                # f.retrlines("RETE patch8.gz", writeline)
                # 以二进制模式下载文件
                f.retrbinary("RETE patch8.gz", fd.write)
                fd.close()
                f.quit()
            except Exception, e:
                print all_errors, e
        def ftp_up_file():
            try:
                host2, username, local_path, server_path = sys.argv[1:]
                password2 = getpass.getpass("Enter passworf for %s on %s:" % (username, host2))
                f = FTP(host2)
                f.login(user=username, passwd=password2)
                f.cwd(server_path)
                fd = open(local_path, "rb")
                f.storbinary("STOR %s" % os.path.basename(local_path), fd)
                fd.close()
                f.quit()
            except Exception, e:
                print all_errors, e

          Parmmiko很好的完成sftp文件传输操作,可以用在SVN管理代码项目中进行持续集成开发或者测试

          原文链接:http://blog.csdn.net/Temanm/article/details/50607741

          这里还有一篇讲得更详细的,这在这里一并发过来,有助于加深理解。

          paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。

          1 基于用户名和密码的 sshclient 方式登录

          # 建立一个sshclient对象
          ssh = paramiko.SSHClient()
          # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
          ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
          # 调用connect方法连接服务器
          ssh.connect(hostname='192.168.2.129', port=22, username='super', password='super')
          # 执行命令
          stdin, stdout, stderr = ssh.exec_command('df -hl')
          # 结果放到stdout中,如果有错误将放到stderr中
          print(stdout.read().decode())
          # 关闭连接
          ssh.close()

            2 基于用户名和密码的 transport 方式登录
            方法1是传统的连接服务器、执行命令、关闭的一个操作,有时候需要登录上服务器执行多个操作,比如执行命令、上传/下载文件,方法1则无法实现,可以通过如下方式来操作

            # 实例化一个transport对象
            trans = paramiko.Transport(('192.168.2.129', 22))
            # 建立连接
            trans.connect(username='super', password='super')
            # 将sshclient的对象的transport指定为以上的trans
            ssh = paramiko.SSHClient()
            ssh._transport = trans
            # 执行命令,和传统方法一样
            stdin, stdout, stderr = ssh.exec_command('df -hl')
            print(stdout.read().decode())
            # 关闭连接
            trans.close()

              3 基于公钥密钥的 SSHClient 方式登录

              # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
              pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='12345')
              # 建立连接
              ssh = paramiko.SSHClient()
              ssh.connect(hostname='192.168.2.129',
                          port=22,
                          username='super',
                          pkey=pkey)
              # 执行命令
              stdin, stdout, stderr = ssh.exec_command('df -hl')
              # 结果放到stdout中,如果有错误将放到stderr中
              print(stdout.read().decode())
              # 关闭连接
              ssh.close()

                4 基于密钥的 Transport 方式登录

                # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
                pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='12345')
                # 建立连接
                trans = paramiko.Transport(('192.168.2.129', 22))
                trans.connect(username='super', pkey=pkey)
                # 将sshclient的对象的transport指定为以上的trans
                ssh = paramiko.SSHClient()
                ssh._transport = trans
                # 执行命令,和传统方法一样
                stdin, stdout, stderr = ssh.exec_command('df -hl')
                print(stdout.read().decode())
                # 关闭连接
                trans.close()

                  # 实例化一个trans对象# 实例化一个transport对象
                  trans = paramiko.Transport(('192.168.2.129', 22))
                  # 建立连接
                  trans.connect(username='super', password='super')
                  # 实例化一个 sftp对象,指定连接的通道
                  sftp = paramiko.SFTPClient.from_transport(trans)
                  # 发送文件
                  sftp.put(localpath='/tmp/11.txt', remotepath='/tmp/22.txt')
                  # 下载文件
                  # sftp.get(remotepath, localpath)
                  trans.close()

                    5 实现输入命令立马返回结果的功能
                    以上操作都是基本的连接,如果我们想实现一个类似xshell工具的功能,登录以后可以输入命令回车后就返回结果:

                    import paramiko
                    import os
                    import select
                    import sys
                    # 建立一个socket
                    trans = paramiko.Transport(('192.168.2.129', 22))
                    # 启动一个客户端
                    trans.start_client()
                    # 如果使用rsa密钥登录的话
                    default_key_file = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
                    prikey = paramiko.RSAKey.from_private_key_file(default_key_file)
                    trans.auth_publickey(username='super', key=prikey)
                    # 如果使用用户名和密码登录
                    trans.auth_password(username='super', password='super')
                    # 打开一个通道
                    channel = trans.open_session()
                    # 获取终端
                    channel.get_pty()
                    # 激活终端,这样就可以登录到终端了,就和我们用类似于xshell登录系统一样
                    channel.invoke_shell()
                    # 下面就可以执行你所有的操作,用select实现
                    # 对输入终端sys.stdin和 通道进行监控,
                    # 当用户在终端输入命令后,将命令交给channel通道,这个时候sys.stdin就发生变化,select就可以感知
                    # channel的发送命令、获取结果过程其实就是一个socket的发送和接受信息的过程
                    while True:
                        readlist, writelist, errlist = select.select([channel, sys.stdin,], [], [])
                        # 如果是用户输入命令了,sys.stdin发生变化
                        if sys.stdin in readlist:
                            # 获取输入的内容
                            input_cmd = sys.stdin.read(1)
                            # 将命令发送给服务器
                            channel.sendall(input_cmd)
                        # 服务器返回了结果,channel通道接受到结果,发生变化 select感知到
                        if channel in readlist:
                            # 获取结果
                            result = channel.recv(1024)
                            # 断开连接后退出
                            if len(result) == 0:
                                print("\r\n**** EOF **** \r\n")
                                break
                            # 输出到屏幕
                            sys.stdout.write(result.decode())
                            sys.stdout.flush()
                    # 关闭通道
                    channel.close()
                    # 关闭链接
                    trans.close()

                      6 支持tab自动补全

                      import paramiko
                      import os
                      import select
                      import sys
                      import tty
                      import termios
                      实现一个xshell登录系统的效果,登录到系统就不断输入命令同时返回结果
                      支持自动补全,直接调用服务器终端
                      # 建立一个socket
                      trans = paramiko.Transport(('192.168.2.129', 22))
                      # 启动一个客户端
                      trans.start_client()
                      # 如果使用rsa密钥登录的话
                      default_key_file = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
                      prikey = paramiko.RSAKey.from_private_key_file(default_key_file)
                      trans.auth_publickey(username='super', key=prikey)
                      # 如果使用用户名和密码登录
                      trans.auth_password(username='super', password='super')
                      # 打开一个通道
                      channel = trans.open_session()
                      # 获取终端
                      channel.get_pty()
                      # 激活终端,这样就可以登录到终端了,就和我们用类似于xshell登录系统一样
                      channel.invoke_shell()
                      # 获取原操作终端属性
                      oldtty = termios.tcgetattr(sys.stdin)
                      try:
                          # 将现在的操作终端属性设置为服务器上的原生终端属性,可以支持tab了
                          tty.setraw(sys.stdin)
                          channel.settimeout(0)
                          while True:
                              readlist, writelist, errlist = select.select([channel, sys.stdin,], [], [])
                              # 如果是用户输入命令了,sys.stdin发生变化
                              if sys.stdin in readlist:
                                  # 获取输入的内容,输入一个字符发送1个字符
                                  input_cmd = sys.stdin.read(1)
                                  # 将命令发送给服务器
                                  channel.sendall(input_cmd)
                              # 服务器返回了结果,channel通道接受到结果,发生变化 select感知到
                              if channel in readlist:
                                  # 获取结果
                                  result = channel.recv(1024)
                                  # 断开连接后退出
                                  if len(result) == 0:
                                      print("\r\n**** EOF **** \r\n")
                                      break
                                  # 输出到屏幕
                                  sys.stdout.write(result.decode())
                                  sys.stdout.flush()
                      finally:
                          # 执行完后将现在的终端属性恢复为原操作终端属性
                          termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
                      # 关闭通道
                      channel.close()
                      # 关闭链接
                      trans.close()

                      原文链接: http://blog.csdn.net/songfreeman/article/details/50920767

                      paramiko是SSHv2协议的Python实现,提供了客户端与服务器功能。虽然它利用Python C扩展进行低级加密,但paramiko本身是一个围绕SSH网络概念的纯Python接口。 par... 来自: y472360651的专栏 paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。1 基于用户名和密码的 sshclient 方式登录# 建立一个ss... 来自: 蓝精灵 使用db2 data studio链接服务器的数据库的时候显示如下错误:SQL4499N Ensure that the data server has been started. Check th... 来自: 全名工作狂的小城堡 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 举个常见的例子,现有这样的需求:需要使用windows客户端,远程连接到Linux... 来自: sdd220的博客 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由... 来自: harvey2008的专栏 MQ框架非常之多,比较流行的有RabbitMq、ActiveMq、ZeroMq、kafka。这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求。下面我列出这些MQ之间的对比数据和资料。 第一... 来自: Sam哥哥聊技术 paramiko的起源和发展首先来看谁创造了paramiko,是一个名叫Jeff Forcier创建了paramiko项目项目主页http://www.paramiko.org/大家可以去看上面有很多... 来自: qq_42294208的博客 import paramiko, os,zipfileclass preExecute(): def __init__(self, __hostip, __username, __password):... 来自: 从来年少爱做梦,一心只想往前飞 使用paramiko模块有两种连接方式,一种是通过paramiko.SSHClient()函数,利用它来远程执行命令,相关文章SSH客户端 (通过密码连接远程linux主机);另外一种是通过... 来自: SouthWind0的博客 如果我们想要远程拷贝服务器上面的文件,或者对远程服务器进行相关操作的话,使用paramiko可以很好的解决以上问题。它仅需要在本地上安装相应的软件(python、PyCrypto、ecds... 来自: liao392781的博客 近期有使用Python通过SSH连接服务器进行维护的需求,通过搜索发现使用paramiko库的居多,因此决定使用该库。经过短时间的使用后发现paramiko没有如Ruby的net/ssh一般很方便使用... 来自: 猫的菜园子 paramiko是使用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式远程连接服务器。本文简要介绍了paramiko远程机器命令的执行、交互模式登陆和文件上传下载等方法。... 来自: Y2701310012的专栏 paramkio是个python库实现了ssh协议,利用这个库可以实现ssh远程链接并执行远程命令。 安装中可以使用 pip install paramiko,安装后使用时会提示importerro... 来自: wtq1993的博客 ansible功能简介 ansible是基于Python paramiko开发,分布式,无需客户端,轻量级,配置语法使用 YMAL 及 Jinja2模板语言的自动化运维工具,可以用来自动化部署应用、... 来自: piaotiejun的专栏 这是一个非交互示例…它发送cd tmp,ls然后退出。 import sys sys.stderr = open(‘/dev/null’) # Silence silly warnin... 来自: weixin_43134051的博客 paramiko是SSHv2协议的Python实现,提供了客户端与服务器功能。虽然它利用Python C扩展进行低级加密,但paramiko本身是一个围绕SSH网络概念的纯Python接口。 par... 来自: y472360651的专栏 经常使用paramiko工具对几百台设备进行管理。主要是每天到上边取文件过来,作为备份。今天发现程序运行了10个小时还没有结束,就上去看一个究竟。查看日志,发现在取一台服务器上的文件时卡在那里了。自己... 来自: jakieyoung的专栏 时至今日,能够轻松自在的坐在这里跟大家分享一下我安装paramiko模块的经历,我感到非常幸福。。。因为实习公司网络的原因,安装过程中所需要的所有文件都是我用手机流量下载的,而且办公室的手机信号还不太... 来自: PARKZHOU的博客 Windows下有很多非常好的SSH客户端,比如Putty。在python的世界里,你可以使用原始套接字和一些加密函数创建自己的SSH客户端或服务端,但如果有现成的模块,为什么还要自己实现呢。使用Pa... 来自: Just Do IT的行者之路 RuntimeoutError 错误提示:ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443):... 来自: lycorisradiata_1的专栏 1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别、文本翻译、序列预测、中文分词等多个领域。虽然近年来,由于RNN等深度学习方法的发展,HMM模型... 来自: tostq的专栏 Axure RP 8.0 注册码仅供个人学习交流使用(建议购买正版授权)8.1.0.3366亲测可用 Licensee:University of Science and Technology o... 来自: 前端大白兔的博客 最近在论坛中看到了很多实用html5开发视频播放,音乐播放的功能,大部分都在寻找答案。因此我就在这里做一个demo,供大家相互学习。html5开发越来越流行了,而对于视频这一块也是必不可少的一部分。如... 来自: xmt1139057136的专栏 翻译: selfimprE-mail: lgg860911@yahoo.com.cnBlog: http://blog.csdn.net/lgg201转载请声明出处: http://blog.csd... 来自: goosman-lei 上篇文章讲述了机器学习决策树的原理,以及如何选择最优特征作为分类特征。本篇文章将在此基础上进行介绍。主要内容包括:决策树构建、决策树可视化、使用决策树进行分类预测、决策树的存储和读取、sklearn实... 来自: Jack-Cui 大早晨的调着调着程序,视线没离开一会,就发现jlink自动断开连接了,然后重新拔插jlink、重启都不行,才发现小灯已经不亮了,原来是固件损坏了,果断想办法修复这位大爷。以前修复过这个问题,但当时系统... 来自: 紫藤的专栏 人脸识别之特征脸方法(Eigenface)zouxy09@qq.comhttp://blog.csdn.net/zouxy09       因为需要,花了一点时间写了下经典的基于特征脸(EigenFa... 来自: zouxy09的专栏 Assimp是目前比较全的3D格式解析库了,熟悉3D游戏开发的同行都知道,3D的格式非常混乱,各种3D格式在不同场合都有他们特定的应用,游戏引擎只能够解析少部分3D格式,更多实用的格式来自游戏公司自定... 来自: 开发游戏,辉煌全中国 问题场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统... 来自: 开发随笔 0、前提安装elasticsearch的最新版本,目前是2.3.4版本。 elsticsearch新增扮演的角色是:rally分析结果会存储到elasticsearch。1、运行esrally 高级... 来自: 铭毅天下 一、为什么选择RocketMQ 我们来看看官方回答: “我们研究发现,对于ActiveMQ而言,随着越来越多的使用queues和topics,其IO成为了瓶颈。某些情况下,消费者缓慢(消费能力不足)还... 来自: jayjjb的专栏