python Paramiko使用示例

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实现简单EXCEL数据统计的实例

    下面我将为您详细讲解如何用Python实现简单Excel数据统计的实例,教程包含以下内容: 环境配置 安装依赖库 读取Excel数据 统计数据并生成结果 将结果写入新的Excel表格 1. 环境配置 首先,您需要安装Python 3.x环境,并配置好相应的环境变量。 2. 安装依赖库 为了能够读写Excel表格,我们需要安装openpyxl库。您可以通过以下…

    python 2023年5月13日
    00
  • Python基础学习之奇异的GUI对话框

    下面是关于“Python基础学习之奇异的GUI对话框”的完整攻略: 1. GUI对话框的概述 GUI对话框是一种常见的交互方式,用于向用户提示信息或者接收用户输入内容。在Python的GUI编程中,提供了多种不同类型的对话框,包括消息框、文件对话框、颜色选择对话框等。Python的GUI编程主要使用Tkinter库,其中也包含了对话框的实现。 2. Tkin…

    python 2023年6月13日
    00
  • 利用Python实现某OA系统的自动定位功能

    利用Python实现某OA系统的自动定位功能攻略 前言 随着大数据时代的到来,数据已经成为了企业决策的重要依据,并且数据的采集和处理也越来越需要自动化的方式。而其中OA系统是企业中数据收集的重要来源之一,因此实现自动化定位OA系统的功能也变得尤为重要。但是要想实现OA系统的自动化测试,需要掌握一定的知识。 本篇攻略主要介绍了如何使用Python实现某OA系统…

    python 2023年5月19日
    00
  • Python通过psd-tools解析PSD文件

    下面是利用psd-tools库解析PSD文件的完整攻略: 功能介绍 psd-tools是一个Python库,它提供了一种解析Adobe Photoshop PSD文件的方法。使用psd-tools,可以轻松地提取PSD文件中的图层和层组,整理图层并将其导出到其他格式文件。 安装psd-tools psd-tools可以通过pip获得。在控制台中输入以下命令安…

    python 2023年6月3日
    00
  • Python 实现的 Google 批量翻译功能

    下面是Python实现的Google批量翻译功能的完整攻略。 一、实现的原理 Google翻译是一种使用人工智能算法的神经网络翻译模型,它可以将任何给定的词语或句子从一种语言翻译成另一种语言。我们可以使用Python程序调用Google翻译的API来实现批量翻译。 Python中有两个常用的库可以实现Google翻译的API调用,一个是googletrans…

    python 2023年6月5日
    00
  • Python 过滤True条件表达式

    Python中可以使用filter()函数来对一个序列进行过滤操作,filter()函数接收两个参数:第一个是函数,第二个是序列。filter()函数依次对序列中的每个元素调用函数进行判断,只有函数返回True时,才会将该元素加入到返回结果的序列中。使用Python过滤True条件表达式的具体步骤如下: 语法格式: filter(function, sequ…

    python-answer 2023年3月25日
    00
  • Python中处理时间的几种方法小结

    下面是针对“Python中处理时间的几种方法小结”这个主题的完整攻略: Python中处理时间的几种方法小结 时间处理在实际开发中非常常见,Python中也提供了多种处理时间的方法和模块。接下来,我们将对常用的一些方法进行小结。 1. time模块 time模块提供了一些基本的时间函数,可以用于时间戳的转换和计算等。下面是其中几个常用的函数: time() …

    python 2023年6月2日
    00
  • Python 实现敏感目录扫描的示例代码

    Python 实现敏感目录扫描的示例代码 在进行网络安全测试时,敏感目录扫描是一项重要的任务。使用 Python 可以实现自动化敏感目录扫描的过程。以下是 Python 实现敏感目录扫描的示例代码的详细介绍。 1. 使用 requests 模块进行敏感目录扫描 requests 是一个流行的 Python HTTP 库,可以用来发送 HTTP 请求。可以使用…

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