首页 > 编程语言 >Python模块之paramiko的基本使用

Python模块之paramiko的基本使用

时间:2023-08-10 20:00:48浏览次数:65  
标签:__ Python ssh 模块 服务器 远程 paramiko SSH

简介

  • paramiko是一个基于SSHv2协议的纯Python(2.7,3.4+)库;
  • 提供了客户端和服务器的功能;
  • 可以实现SSH2远程安全连接,支持认证和密钥方式;
  • 一般用于执行远程命令、传输文件、中间SSH代理等。

paramiko可以在Python代码中直接使用SSH协议对远程服务器进行操作,而不是调用ssh命令对远程服务器进行操作。

安装

pip install paramiko

说明

paramiko包含两个核心组件,分别是SSHClient和SFTPClient。

SSHClient类

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

方法

  • connect() - 实现远程服务器的连接与认证,hostname是必传的参数

    connect(self, hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False)
    

    参数说明:

    • hostname(str类型):连接目标主机IP地址或主机名
    • port(int类型):连接目标主机的端口,默认为22
    • username(str类型):校验的用户名(默认为当前的本地用户名)
    • password(str类型):密码用于身份校验或解锁私钥
    • pkey:私钥方式用于身份验证
    • key_filename(str or list(str)类型):一个文件名或文件名的列表,用于私钥的身份验证
    • timeout(float类型):一个可选的超时时间(以秒为单位)的TCP连接
    • allow_agent(bool类型):设置为False时用于禁用连接到SSH代理
    • look_for_keys(bool类型):设置为False时用来禁用在~./ssh中搜索秘钥文件
    • compress(bool类型):设置为True时打开压缩
  • set_missing_host_key_policy(policy) - 设置连接远程主机没有本地主机秘钥或HostKeys对象时的策略,目前支持如下三种方式

    • AutoAddPolicy:自动添加主机名及主机秘钥到本地HostKeys对象,并将其保存,不依赖load_system_host_keys,即使~/.ssh/known_hosts不存在也不影响
    • RejectPolicy(默认):自动拒绝未知的主机名或秘钥,依赖load_system_host_keys()配置
    • WarningPolicy:用于记录一个未知的主机秘钥的Python警告,并接受它,功能上与AutoAddPolicy相似,但未知主机会有告警
  • exec_command() - 在远程服务器上执行Linux命令的方法

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

  • load_system_host_keys() - 加载本地公钥校验文件,默认为~/.ssh/known_hosts,非默认路径需要收工指定

例子

import paramiko

SSH_CONFIG = {
    'hostname': '10.10.31.12',  # ip
    'port': 22,  # 端口
    'username': 'root',  # 用户名
    'password': '123456',  # 密码
}


def main():
    # 建立ssh连接
    ssh_client = paramiko.SSHClient()  # 实例化SSHClient对象
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 设置自动添加策略
    ssh_client.connect(**SSH_CONFIG)  # 连接SSH服务端,以用户名和密码进行认证

    # 开启一个Channel并执行命令
    stdin, stdout, stderr = ssh_client.exec_command('uname -a')  # stdout为正确输出,stderr为错误输出,同时只有1个变量有值
    print(stdout.read().decode('utf-8'))  # 打印返回的stdout
    ssh_client.close()  # 关闭SSHClient


if __name__ == '__main__':
    main()

 

SFTPClient类

SFTPClient作为一个SFTP客户端对象,根据SSH传输协议的sftp会话,实现远程操作,比如文件上传,下载,权限,状态等,端口就是SSH端口

方法

  • from_transport():创建一个已连通的SFTP客户端通道

  • put():上传本地文件到远程服务器

  • get():从远程服务器下载文件到本地

  • mkdir():在远程服务器上创建目录

  • remove():删除远程服务器中的文件

  • rmdir():删除远程服务器中的目录

  • rename():重命名远程服务器中的文件或目录

  • stat():获取远程服务器中文件的详细信息

  • listdir():列出远程服务器中指定目录下的内容

例子

import paramiko


def main():
    tran = paramiko.Transport(('10.10.31.12', 22))  # 获取Transport实例
    tran.connect(username="root", password='123456')  # 连接SSH服务端
    sftp_client = paramiko.SFTPClient.from_transport(tran)  # 实例化SFTPClient对象

    # 设置上传的本地/远程文件路径
    local_path = "D:/doc/a.txt"
    remote_path = "/tmp/a.txt"

    sftp_client.put(local_path, remote_path)  # 上传
    print("上传成功")
    sftp_client.get(remote_path, local_path)  # 下载
    print("下载成功")
    tran.close()  # 关闭


if __name__ == '__main__':
    main()

参考链接:点击这里

标签:__,Python,ssh,模块,服务器,远程,paramiko,SSH
From: https://www.cnblogs.com/10086upup/p/17621364.html

相关文章

  • 分享之python 协程
    线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。协程的适用场景:当程序中存在大......
  • 软件测试|什么是Python构造方法,构造方法如何使用?
    构造方法(Constructor)是面向对象编程中的重要概念,它在创建对象时用于初始化对象的实例变量。在Python中,构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。什么是构造方法?在面向对象编程中,构造方法是一个特殊的方法,用于在创建对象时初......
  • opencv-python图像金字塔
    图像金字塔是图像中多尺度表达的一种,主要用于图像特征检测,图像分割等领域,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说,图像金字塔是同一图像不同分辨率的子图集合。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐渐降低,且来源于同一张原始图的图像集合。层......
  • python编译pyc文件
    python提供了内置的类库来实现把py文件编译为pyc文件,这个模块就是py_compile模块。将单个python文件转为pyc文件python-mpy_compilemycode.py将一个目录中的python文件转为pyc文件python-mcompileall./your_path/编译完成后如果想要直接运行Pyc文件注意两点:1.要把p......
  • python操作MySQL
    #macOS操作MySQL服务#启动MySQLmysql.serverstart#停止MySQLmysql.serverstop#重启MySQLmysql.serverrestart#查看当前MySQL服务状态mysql.serverstatus#配置MySQL服务器#我们需要运行以下脚本配置MySQL服务器的安全性:mysql_secure_install......
  • GIL 锁或将在 CPython 中成为可选项
    哈喽大家好,我是咸鱼几天前有媒体报道称,经过多次辩论,Python指导委员会打算批准通过PEP703提案,让GIL(全局解释器)锁在CPython中成为一个可选项PEP703提案主要目标是使GIL变成可选项,即允许Python解释器在特定情况下不使用GIL这将允许Python在多核处理器上更好地利用......
  • python dict 和 object 相互转换
    pythondict和object的相互转换dict.py借助dict,isinstance来实现对象与字典之间的相互转换defas_dict(obj):ifnothasattr(obj,"__dict__"):returnobjresult={}forkey,valinobj.__dict__.items():ifkey.startswith("_"):......
  • 使用Aspose.BarCode,在 Python 中扫描条码
    条形码是机器可读的数据表示形式,由平行线或几何图案直观地表示。它们提供了一种快速准确的方法来存储和检索信息,例如产品详细信息、库存代码或跟踪号码。条形码有多种类型,包括UPC、EAN、QR码等。每种类型都有特定的结构和编码机制。在这篇博文中,我们将学习如何构建高性能的Python......
  • Python列表排序sort和sorted的区别
    lst_1=[3,1,2]lst_2=[4,6,5]print(lst_1.sort())lst_1.sort()print(lst_1)print(sorted(lst_2))#None#[1,2,3]#[4,5,6]所以结论就是:sorted(list)原来的list不变,生成一个新的排好序的list对象。list.sort()改变原有的list,不会返回对象。......
  • 在 Python 中使用 Pygal 绘制世界地图
    在Python的Pygal库的帮助下,我们可以在Python中创建令人惊叹的世界地图,因为它提供了不同的功能来创建和自定义图形。本文探讨了绘制世界地图、自定义地图样式、添加数据以突出显示国家或地区以及将地图呈现为SVG文件的分步过程。无论您是想可视化地理数据、展示国际统计数据......