51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1282|回复: 0
打印 上一主题 下一主题

[转贴] 高级且优雅地远程操作服务器:认识Python模块Paramiko

[复制链接]
  • TA的每日心情
    擦汗
    4 小时前
  • 签到天数: 1026 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-1-18 14:28:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
     前言
      测试过程中经常会遇到需要将本地的文件上传到远程服务器上,或者需要将服务器上的文件拉到本地进行操作,以前安静经常会用到xftp工具。今天安静介绍一种python库Paramiko,可以帮助我们通过代码的方式进行完成对远程服务器的上传和下载操作,也可以进行对远程服务器输入操作命令。

      Paramiko
      Paramiko属于python的一个第三方库,可以远程连接Linux服务器,进行通过python进行对Linux进行操作,可以实现进行对远程服务器进行下载和上传文件操作。

      安装
      既然是第三方库,我们可以通过pip进行安装:
    1. pip install paramiko
    复制代码

    基本使用
      Paramiko库主要包含两个部分:SSHClient和SFTPClient
      SSHClient:表示类似于Linux的ssh命令,我们可以通过SSHClient模块对远程服务器执行一些命令操作(Linux)。
      SFTPClient:表示类似于SFTP工具,可以实现对远程服务器的文件进行上传和下载。

      SSHClient
      这里安静通过SSHClient进行对远程服务器上进行连接,并执行Linux命令,首先进行对paramiko下的SSHClient完成实例化,在使用SSHclient下的connet进行连接,后续进行操作一些命令:
    1. import paramiko
    2. # 进行对paramiko方法下的SSHclient进行实例化
    3. ssh = paramiko.SSHClient()
    4. # 保存服务器密钥
    5. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
    6. # 输入服务器地址,账户名,密码
    7. ssh.connect(hostname='xxxx', port=22,username='root',password='xxxxxx')
    8. # 返回了三个数据,第一个是输入命令,第2个是命令返回的结果,第3个是命令错误时返回的结果
    9. stdin, stdout, stderr = ssh.exec_command('pwd;lll')
    10. # 返回了当前的路径结果,如果错误则返回为空
    11. print(stdout.read().decode('utf-8'))
    12. # 返回错误的执行结果,如果正确则返回为空
    13. print(stderr.read().decode('utf-8'))
    复制代码
    通过执行代码操作后,就很清楚的看到我们已经完成了对linux命令的输入,返回了正确的信息和错误的信息。


     SFTPClient
      sftpclient前面也介绍了主要是类似于xftp的工具,可以帮助我们实现远程文件的上传,下载。其实用方法也是一样的。先进行实例化,然后通过登录到服务器,通过创建sftp工具然后进行完成文件的上传和下载。

      上传文件
      安静这里先编写一个txt文件,然后将这个文件通过代码的方法传入到服务器上。

      这里通过的上传方法是put(服务器路径,本地路径):
    1. import paramiko
    2. # 对paramiko方法下的SSHclient进行实例化
    3. ssh = paramiko.SSHClient()
    4. # 保存服务器密钥
    5. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    6. # 输入服务器地址,账户名,密码
    7. ssh.connect(hostname='xxxxx', port=22, username='root',password='xxxxxx')
    8. # 创建sftp客户端
    9. sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
    10. # 本地路径
    11. aaa = "anjing.txt"
    12. # 远程路径
    13. bbb = "/home/anjing/222/anjing.txt"
    14. sftp.put(aaa, bbb)
    复制代码
     通过执行代码后,我们发现服务器上已经存在了刚刚上传的文件。

    文件下载
      我们通过进行将这个文本内容进行修改,然后将文件传到我们本地文件中通过vi命令进行编辑。

    下载这里使用的方法是get(服务器路径,本地路径):
    1. import paramiko
    2. # 对paramiko方法下的SSHclient进行实例化
    3. ssh = paramiko.SSHClient()
    4. # 保存服务器密钥
    5. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    6. # 输入服务器地址,账户名,密码
    7. ssh.connect(hostname='xxxxx', port=22, username='root',password='xxxxxx')
    8. # 创建sftp客户端
    9. sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
    10. # 远程路径
    11. bbb = "/home/anjing/2
    12. # 下载文件
    13. sftp.get(bbb, r'E:\web\anjing_01.txt')
    复制代码
     通过执行代码后发现我们已经成功的将服务器上修改过的文件下载到了本地并修改了名称。

    总结
      安静通过小小的例子简单的介绍了paramiko如何对文件上传下载和执行linux的命令操作。对于我们测试来言,无论是日常测试中,还是在编写自动化中,又遇到需要服务器操作的时候,都可以尝试下,一来可以在领导面前稳稳的装一波,二来也可以增加我们对python知识的提高。好了,感谢您的阅读,希望对您有所帮助。




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-29 13:32 , Processed in 0.092034 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表