介绍

网络传输是遵循协议的,比如SSH,paramiko则是实现了SSHv2协议的一个python库(底层使用的是cryptography)。有了paramiko之后,我们便可以通过python使用ssh协议来连接远程服务器执行操作,不用再通过xshell等工具。安装也很简单,直接pip install paramiko即可

paramiko包含两大核心组件:SSHClient和SFTPClient

  • SSHClient的作用类似于Linux下的ssh命令,是对SSH会话的封装,该类封装了传输(transport),通道(channel)及SFTPClient建立的方法(open_sftp)等等、通常用于执行远程命令

    1. transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel
    2. channel:是一种类Socket,一种安全的SSH传输通道
    3. session:是clientServer保持连接的对象,用connect()/start_client()/start_server()开始会话
  • SFTPClient的作用类似于Linux下的sftp命令,是对SFTP客户端的封装,用于实现远程文件操作,如:文件上传、下载、修改文件权限等操作


SSHClient的使用

一般都会先创建一个客户端实例,client = paramiko.SSHClient(),然后这个client下有很多方法

  • connect():实现远程服务器的连接与认证

    1. def connect(
    2. self,
    3. hostname,
    4. port=SSH_PORT,
    5. username=None,
    6. password=None,
    7. pkey=None,
    8. key_filename=None,
    9. timeout=None,
    10. allow_agent=True,
    11. look_for_keys=True,
    12. compress=False,
    13. sock=None,
    14. gss_auth=False,
    15. gss_kex=False,
    16. gss_deleg_creds=True,
    17. gss_host=None,
    18. banner_timeout=None,
    19. auth_timeout=None,
    20. gss_trust_dns=True,
    21. passphrase=None,
    22. ):
    23. 常用参数:
    24. hostname:连接的目的主机,这个参数是必须的
    25. port=SSH_PORT:指定端口,默认是22
    26. username=None:验证的用户名
    27. password=None:验证的用户密码
    28. pkey=None:私钥方式用于身份验证
    29. key_filename=None:一个文件名或者文件列表,指定私钥文件
    30. timeout=None:可选的tcp连接超时时间
    31. allow_agent=True:是否允许连接到ssh代理,默认为True
    32. look_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许
    33. compress=False, 是否打开压缩
  • set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:

    1. 设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种:
    2. AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yesno进行确认
    3. WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接
    4. RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项
  • exec_command():在远程服务器执行Linux命令的方法。

  • open_sftp():在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。

    1. # 利用SSHClient对象的open_sftp()方法,可以直接返回一个基于当前连接的sftp对象,可以进行文件的上传等操作.
    2. sftp = client.open_sftp()
    3. sftp.put('1.txt','2.txt')
  1. import paramiko
  2. # 实例化SSHClient
  3. client = paramiko.SSHClient()
  4. # 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
  5. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  6. # 连接SSH服务端,以用户名和密码进行认证
  7. client.connect(hostname='47.94.174.89', port=22, username='root', password='zgdasdas223')
  8. # 打开一个Channel并执行命令
  9. stdin, stdout, stderr = client.exec_command('ls / ') # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值
  10. # 打印执行结果
  11. print(stdout.read().decode('utf-8'))
  12. """
  13. bin
  14. boot
  15. dev
  16. etc
  17. home
  18. lib
  19. lib64
  20. lost+found
  21. media
  22. mnt
  23. opt
  24. proc
  25. root
  26. run
  27. sbin
  28. srv
  29. sys
  30. tmp
  31. usr
  32. var
  33. """
  34. # 关闭SSHClient
  35. client.close()
  1. import paramiko
  2. # 实例化SSHClient
  3. client = paramiko.SSHClient()
  4. # 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
  5. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  6. # 连接SSH服务端,以用户名和密码进行认证
  7. client.connect(hostname='47.94.174.89', port=22, username='root', password='zggdsadsa13')
  8. # 打开一个Channel并执行命令
  9. stdin, stdout, stderr = client.exec_command('dsadasdasdas ') # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值
  10. # 打印执行结果
  11. print(stderr.read().decode('utf-8'))
  12. """
  13. bash: dsadasdasdas: command not found
  14. """
  15. # 关闭SSHClient
  16. client.close()


SFTPClient的使用

SFTPCLient作为一个sftp的客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传、下载、权限、状态

  1. from_transport(cls,t) 创建一个已连通的SFTP客户端通道
  2. put(localpath, remotepath, callback=None, confirm=True) 将本地文件上传到服务器 参数confirm:是否调用stat()方法检查文件状态,返回ls -l的结果
  3. get(remotepath, localpath, callback=None) 从服务器下载文件到本地
  4. mkdir() 在服务器上创建目录
  5. remove() 在服务器上删除目录
  6. rename() 在服务器上重命名目录
  7. stat() 查看服务器文件状态
  8. listdir() 列出服务器目录下的文件
  1. import paramiko
  2. # 获取transport实例
  3. transport = paramiko.Transport(("47.94.174.89", 22))
  4. # 连接ssh,通过username和password
  5. transport.connect(username="root", password="dasdsadas3")
  6. # 获取SFTP实例
  7. sftp = paramiko.SFTPClient.from_transport(transport)
  8. # 执行下载文件
  9. sftp.get("/root/dockerfile", "dockerfile")
  10. # 执行上传文件
  11. sftp.put("1.py", "/root/11.py")
  12. transport.close()

paramiko:实现ssh协议,对linux服务器资源的访问的更多相关文章

  1. 通过SSH服务登陆linux服务器(版本RHEL7)

    通过SSH服务登陆linux服务器(版本RHEL7) SSH服务概述:是一种能够以安全的方式提供远程登陆的协议,也是目前远程管理linux系统的首选方式.在此之前,我们一般使用FTP或者telnet来 ...

  2. iTerm 2打造ssh完美连接Linux服务器快捷方法

    iTerm 2打造ssh完美连接Linux服务器快捷方法 2019年05月02日 10:40:19 Mars0908 阅读数 213更多 个人分类: Mac下开发   版权声明:本文为博主原创文章,遵 ...

  3. 保持SSH连接的linux服务器不断线

    目录 1. secureCRT和putty连接设置 2. 命令行设置 3. 服务器配置修改 4. 参考 使用ssh连接远程服务器的时候,如果长时间没有操作,远程连接就有可能中断.正在执行的程序和vim ...

  4. ssh远程登录linux服务器

    ssh远程登录linux服务器 用法: ssh -l user -p port server_ip 或者 ssh -p port user@server_ip 参数: -l 后接要登录的远程系统用户名 ...

  5. 如何在Windows系统上利用Telnet协议连接Linux服务器

    Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家 ...

  6. python paramiko模块SSH自动登录linux系统进行操作

    1). Linux系统首先要开启SSH服务:service ssh status 如果没安装的话,则要:apt-get install openssh-server service ssh resta ...

  7. Mac下使用终端连接远程使用ssh协议的git服务器

    最近换了台新电脑, MacBook pro,拿到新电脑之后小小心喜了一下(终于解脱windows的束缚拥抱mac啦), 然后就开始苦逼的安装各种开发环境了. 之前在windows上使用tortoise ...

  8. [Linux][Mac]如何使用SSH登陆远程Linux服务器&使用SCP下载远程终端文件

    --------------------------- 2017-01-16 初版 2017-01-17 增加ssh登录端口修改 -------------------------- 一.使用ssh ...

  9. Jmeter通过SSHCommand测试获取Linux服务器资源文件信息

    有些时间我们想通过接口测试来获取服务器上面的某个资源文件信息,应该怎么办? 别急.... Jmeter通过ssh协议可以实现这个操作. 下面来看一下具体的实现吧. 需要提前安装好的工具: 1.按照好j ...

随机推荐

  1. day01-JavaScript中"Uncaught TypeError: Cannot set property 'innerHTML' of null"错误

    转行学开发,代码100天.初写了最简的一段Js代码,即通过document中的innerHTML方法修改一个<p>标签的内容,报以下错误. -"Uncaught TypeErro ...

  2. pycharm设置背景颜色

    https://jingyan.baidu.com/article/9faa7231f88570473c28cb88.html

  3. XSS攻击总结

    本文由 http://www.cnblogs.com/phpstudy2015-6/p/6767032.html 整理总结而来 XSS又称CSS(cross site script),译为跨站脚本攻击 ...

  4. vue 使用 npm run dev命令后 自动打开浏览器

    1.使用vue-cli 老版本构建项目时, 可修改config文件夹下index.js文件 autoOpenBrowser 属性给为 true 即可 使用vue-cli 3.x 版本后,所有的配置项均 ...

  5. Linux系统编程——基础命令总结

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/asialee_bird/article/ ...

  6. Python爬虫学习==>第八章:Requests库详解

    学习目的: request库比urllib库使用更加简洁,且更方便. 正式步骤 Step1:什么是requests requests是用Python语言编写,基于urllib,采用Apache2 Li ...

  7. 【HANA系列】SAP HANA LEFT/RIGHT字符串截取

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA LEFT/RI ...

  8. Python:Django 项目中可用的各种装备和辅助

    1 Redis 数据库 2 MySQL 数据库 3 前端服务器 live-server 4 定时任务 django-crontab扩展 5 Docker 容器 --用来运行 FastDFS 分布式文件 ...

  9. Java架构师 成长之路 -- 跳出程序员陷阱(转载)

    本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路. 如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序 ...

  10. 统计学习方法 | 第3章 k邻近法

    第3章 k近邻法   1.近邻法是基本且简单的分类与回归方法.近邻法的基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的个最近邻训练实例点,然后利用这个训练实例点的类的多数来预测输入实例 ...