python Paramiko使用示例

yizhihongxing

Python Paramiko使用示例

什么是Paramiko?

Paramiko 是 Python 实现的 SSH 客户端,提供了 SSH2 协议的完整实现。它支持加密和身份验证的混合模式,并可用于同时处理多个客户端连接。

安装Paramiko

你可以在终端中使用Python包管理器pip来安装Paramiko,只需要在命令行输入pip install Paramiko便可安装。

基本使用方法

连接SSH

Paramiko 使用 SSHClient 类是连接 SSH 服务器的最简单方法。下面是使用 SSHClient 类连接到 SSH 服务器的步骤:

import paramiko

# 创建一个paramiko的SSH客户端
ssh = paramiko.SSHClient()

# 默认情况下,SSHClient 连接远程主机时不接受不在自身信任列表内的主机
# 可以加载本地的know_hosts文件
ssh.load_system_host_keys()

# 连接SSH服务器,需要传入SSH服务器的地址、端口、用户名以及密码
ssh.connect('192.168.10.10', port=22, username='your_username', password='your_password')

执行命令

SSHClient 的 exec_command() 方法是 Paramiko 中执行远程命令的方法。当调用它时,命令将在远程服务器上执行并返回结果。

stdin, stdout, stderr = ssh.exec_command('echo "Hello World"')
ssh.close()

上传和下载文件

你也可以使用 Paramiko 连接到远程服务器并通过 SCP 协议上传和下载文件。下面是使用 SCP 协议将文件从本地计算机上传到远程服务器的方法:

import paramiko

t = paramiko.Transport(('192.168.10.10', 22))
t.connect(username='your_username', password='your_password')
sch = paramiko.SFTPClient.from_transport(t)

local_path = '/path/to/local/file'
remote_path = '/path/to/remote/file'

sch.put(local_path, remote_path)
t.close()

从远程服务器下载文件到本地计算机的方法如下:

import paramiko

t = paramiko.Transport(('192.168.10.10', 22))
t.connect(username='your_username', password='your_password')
sch = paramiko.SFTPClient.from_transport(t)

local_path = '/path/to/local/file'
remote_path = '/path/to/remote/file'

sch.get(remote_path, local_path)
t.close()

示例说明

示例一

下面是一个使用 Paramiko 连接到远程服务器并执行一些基本命令的例子:

import paramiko


class SSH:
    def __init__(self, host, port, username, password):
        self.host = host
        self.port = port
        self.username = username
        self.password = password

    def connect(self):
        try:
            self._transport = paramiko.Transport((self.host, self.port))
            self._transport.connect(username=self.username, password=self.password)
            self._session = self._transport.open_channel(kind='session')
            self._session.invoke_shell()
            print(f'连接到主机{self.host}成功')
        except Exception as e:
            print(f'连接失败 {e}')

    def run_cmd(self, command):
        """
        执行命令,支持多个命令之间用换行符隔开
        :param command: 需要执行的命令
        """
        try:
            output = ''
            for cmd in command.split('\n'):
                if cmd.strip() != '':
                    self._session.send(cmd+'\n')
                    while True:
                        data = self._session.recv(1024).decode()
                        output += data
                        if output.endswith('$ ') or output.endswith('# '):
                            break
            return output
        except Exception as e:
            print(f'执行命令时出错 {e}')

    def disconnect(self):
        try:
            self._transport.close()
        except Exception as e:
            print(f'关闭SSH连接时出错 {e}')

示例一中实现了一个远程SSH连接的类,该类中有三个方法:

  • connect():连接到SSH服务器。建立连接后可以执行其他操作。
  • run_cmd():执行完整命令。支持多个命令之间用换行符隔开。
  • disconnect():关闭SSH连接。

这个类的使用方式如下:

# 创建SSH对象
ssh = SSH('192.168.10.10', 22, 'your_username', 'your_password')

# 连接到SSH服务器
ssh.connect()

# 执行命令
output = ssh.run_cmd('ls; echo "Hello World"')

# 断开连接
ssh.disconnect()

示例二

下面是一个使用 Paramiko 在远程服务器上下载文件的例子:

import paramiko


class SFTP:
    def __init__(self, host, port, username, password):
        self.host = host
        self.port = port
        self.username = username
        self.password = password

    def connect(self):
        try:
            self._transport = paramiko.Transport((self.host, self.port))
            self._transport.connect(username=self.username, password=self.password)
            self._sftp = paramiko.SFTP.from_transport(self._transport)
            print(f'连接到主机{self.host}成功')
        except Exception as e:
            print(f'连接失败 {e}')

    def sftp_get(self, remote_file_path, local_file_path):
        """
        从服务器下载文件
        :param remote_file_path: 远程服务器文件路径
        :param local_file_path: 本地文件路径
        """
        try:
            self._sftp.get(remote_file_path, local_file_path)
            print(f'文件下载成功,本地路径为: {local_file_path}')
        except Exception as e:
            print(f'文件下载失败,请检查远程文件路径和本地文件路径是否正确')
            print(str(e))

    def disconnect(self):
        try:
            self._transport.close()
            print(f'与主机{self.host}断开连接成功')
        except Exception as e:
            print(f'关闭SFTP连接时出错 {e}')

示例二中呈现了一个远程SFTP连接的类,该类中有三个方法:

  • connect():连接到SFTP服务器。建立连接后可以执行其他操作。
  • sftp_get():从服务器下载文件。
  • disconnect():关闭SFTP连接。

这个类的使用方式如下:

# 创建SFTP对象
sftp = SFTP('192.168.10.10', 22, 'your_username', 'your_password')

# 连接到SFTP服务器
sftp.connect()

# 下载文件到本地计算机
sftp.sftp_get('/path/to/remote/file', '/path/to/local/file')

# 断开连接
sftp.disconnect()

总结

在本篇攻略中,我们学习了如何使用 Paramiko 去连接 SSH 服务器、执行命令、上传下载文件。我们建立了一个 SSH 和 SFTP 类,这些类封装了常用的操作,你可以使用这些类快速地去连接 SSH 服务器,执行命令和上传下载文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python Paramiko使用示例 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 深入讲解Python中面向对象编程的相关知识

    深入讲解Python中面向对象编程的相关知识 面向对象编程是一种流行的程序设计范式,其核心思想是将程序中的对象抽象出来,然后定义它们的属性和方法,从而实现代码的复用和模块化。Python作为一种面向对象的编程语言,具有强大的面向对象特性,让程序员能够更高效地编写和管理复杂的程序。 什么是面向对象编程 在面向对象编程中,一个对象是一个具有状态和行为的实体。例如…

    python 2023年5月30日
    00
  • 用Python中的NumPy在点(x,y)上评估二维拉盖尔数列与一维数组的系数

    评估二维拉盖尔数列与一维数组的系数可以使用Python中的NumPy库来完成。以下是完成该任务的步骤: 步骤一:导入必要的库 首先需要导入的是NumPy库,还需要导入matplotlib库,这个库可以帮助我们绘制图形来帮助理解数据。 import numpy as np import matplotlib.pyplot as plt 步骤二:定义二维拉盖尔数…

    python-answer 2023年3月25日
    00
  • 详解Python PIL Image.open()方法

    Python PIL库中,Image.open()方法可以打开并返回一个指定路径的图像文件对象。下面是该方法的详细说明: 方法签名 Image.open(fp, mode=’r’) 参数说明 fp:打开的文件路径(字符串)或文件对象 mode:打开文件的模式,可选 modes 包中的预定义模式列表,例如 ‘r’,’w’ 或者 ‘r+b’。默认为 ‘r’。 返…

    python-answer 2023年3月25日
    00
  • 教你用python实现12306余票查询

    教你用Python实现12306余票查询 一、背景 在高铁日益普及的今天,越来越多的人选择坐高铁出行,但是因为高铁车票是如此的抢手,导致许多人在购票时无法买到心仪的车次,于是余票查询功能就显得尤为重要。12306余票查询正是此类功能之一,它可以让我们查询到当前某一时间段内的高铁余票信息。 二、工具 本攻略采用Python 3及其相关第三方库实现,其中需要的第…

    python 2023年5月31日
    00
  • Python中可以用三种方法判断文件是否存在

    在Python中,可以用三种方法判断文件是否存在,分别为: os.path.isfile() 这是Python自带的一个库,判断某个路径是否为文件。可以使用以下语法: import os # 检查文件是否存在 if os.path.isfile(‘/path/to/file’): print(‘文件存在’) else: print(‘文件不存在’) 其中,/…

    python 2023年6月2日
    00
  • Python判断是否json是否包含一个key的方法

    判断一个json对象是否包含某个key的方法在Python中有很多种,下面给出两种常见的方法: 使用in关键字 使用in关键字可以非常简单地判断一个json对象是否包含某个key,示例如下: import json data = ‘{"name": "John", "age": 30, "…

    python 2023年6月3日
    00
  • 如何基于Python爬取隐秘的角落评论

    关于“如何基于Python爬取隐秘的角落评论”,以下是完整的攻略过程: 一、确定爬取目标 在开始之前,我们需要明确自己的爬取目标,例如,要从哪个网站或者哪个页面爬取评论、需要爬取的数据类型是什么等等。 二、安装相关Python库 Python可以通过第三方库进行网页爬取,这里我们需要安装几个库,包括requests、bs4、re、csv等库。 # 安装 re…

    python 2023年5月14日
    00
  • Python3爬虫学习之将爬取的信息保存到本地的方法详解

    Python3爬虫学习之将爬取的信息保存到本地的方法详解 在进行网页数据的爬取时,我们常常需要将爬取到的信息保存到本地文件中。本文将详细讲解在Python3中,如何将爬取到的数据保存到本地文件中的几种方法。 方法一:使用open函数 Python3可以使用内置的open函数打开/创建文件,并且通过write方法将获取到的数据写入文件中。下面是一个示例代码: …

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部