Python利用paramiko实现基本的SSH客户端操作

 更新时间:2025年06月06日 09:43:08   作者:牛肉胡辣汤  
​​paramiko​​ 是一个用于进行 SSH2 协议编程的 Python 库,它支持加密和认证功能,本文将通过几个实例来介绍如何使用 ​​paramiko​​ 进行基本的 SSH 客户端操作,感兴趣的可以了解下

简介

​​paramiko​​ 是一个用于进行 SSH2 协议编程的 Python 库,它支持加密和认证功能,可以用来实现安全的远程命令执行和文件传输。本文将通过几个实例来介绍如何使用 ​​paramiko​​ 进行基本的 SSH 客户端操作。

安装 Paramiko

在使用 ​​paramiko​​ 之前,需要先安装该库。可以通过 ​​pip​​ 命令轻松安装:

pip install paramiko

基本使用

创建 SSH 客户端连接

首先,我们需要创建一个 SSH 客户端对象,并通过该对象连接到远程服务器。

import paramiko
 
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='username', password='password')

​​set_missing_host_key_policy(paramiko.AutoAddPolicy())​​:设置自动添加策略,用于添加和保存服务器的 SSH 密钥。

​​connect()​​ 方法用于连接到指定的主机,需要提供主机名、用户名和密码。

执行远程命令

连接成功后,可以使用 ​​exec_command()​​ 方法来执行远程命令。

stdin, stdout, stderr = ssh.exec_command('ls /home')
print(stdout.read().decode())

​​exec_command()​​ 返回三个对象:​​stdin​​(标准输入)、​​stdout​​(标准输出)和 ​​stderr​​(标准错误)。

使用 ​​stdout.read().decode()​​ 可以读取命令的输出并解码为字符串格式。

文件传输

除了执行命令,​​paramiko​​ 还支持文件的上传和下载。这可以通过 ​​SFTP​​ 功能实现。

上传文件

sftp = ssh.open_sftp()
sftp.put('/path/to/local/file', '/path/to/remote/file')
sftp.close()

​​open_sftp()​​ 方法打开 SFTP 会话。

​​put()​​ 方法用于上传本地文件到远程服务器。

最后调用 ​​close()​​ 方法关闭 SFTP 会话。

下载文件

sftp = ssh.open_sftp()
sftp.get('/path/to/remote/file', '/path/to/local/file')
sftp.close()

​​get()​​ 方法用于从远程服务器下载文件到本地。

关闭连接

完成所有操作后,记得关闭 SSH 连接以释放资源。

ssh.close()

高级用法

使用密钥认证

除了使用密码认证,​​paramiko​​ 还支持使用私钥进行身份验证。

private_key = paramiko.RSAKey.from_private_key_file('/path/to/private/key')
ssh.connect('hostname', username='username', pkey=private_key)

​​RSAKey.from_private_key_file()​​ 方法从指定路径加载私钥文件。

在 ​​connect()​​ 方法中使用 ​​pkey​​ 参数传递私钥对象。

处理命令输出

在执行远程命令时,有时需要处理命令的标准输出和标准错误。可以通过检查 ​​stdout​​ 和 ​​stderr​​ 来实现这一点。

stdin, stdout, stderr = ssh.exec_command('command')
output = stdout.read().decode()
error = stderr.read().decode()
 
if error:
    print(f"Error: {error}")
else:
    print(f"Output: {output}")

检查 ​​stderr​​ 的内容,如果存在则打印错误信息。

如果没有错误,则打印命令的输出。

知识补充

​​paramiko​​​ 提供了强大的功能来处理 SSH 连接,无论是执行远程命令还是文件传输,都非常方便。通过本文的几个实例,希望读者能够对 ​​paramiko​​​ 的基本用法有一个初步的了解,并能够在实际项目中应用这些知识。以上是关于 ​​paramiko​​​ 库的基本使用教程,包括如何安装、创建 SSH 连接、执行命令、文件传输以及一些高级用法。​​paramiko​​​ 是一个用于在 Python 中进行 SSH2 协议编程的强大库,常用于远程服务器管理和自动化任务。下面我将提供几个实际应用场景中的 ​​paramiko​​

示例代码:

1. 远程执行命令

假设你需要定期从远程服务器获取系统信息,比如 CPU 使用率、内存使用情况等。

import paramiko
 
# 创建 SSH 客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
# 连接到远程服务器
ssh.connect('192.168.1.100', username='user', password='password')
 
# 执行命令
stdin, stdout, stderr = ssh.exec_command('top -b -n 1')
output = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
 
# 打印输出
print("Output:\n", output)
if error:
    print("Error:\n", error)
 
# 关闭连接
ssh.close()

2. 上传和下载文件

假设你需要将本地文件上传到远程服务器,或者从远程服务器下载文件。

import paramiko
 
# 创建 SSH 客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
# 连接到远程服务器
ssh.connect('192.168.1.100', username='user', password='password')
 
# 创建 SFTP 会话
sftp = ssh.open_sftp()
 
# 上传文件
local_path = '/path/to/local/file.txt'
remote_path = '/path/to/remote/file.txt'
sftp.put(local_path, remote_path)
 
# 下载文件
remote_path = '/path/to/remote/file.txt'
local_path = '/path/to/local/file.txt'
sftp.get(remote_path, local_path)
 
# 关闭 SFTP 会话和 SSH 连接
sftp.close()
ssh.close()

3. 动态配置管理

假设你需要在多台服务器上动态配置环境变量或修改配置文件。

import paramiko
 
# 创建 SSH 客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
# 连接到远程服务器
ssh.connect('192.168.1.100', username='user', password='password')
 
# 修改配置文件
command = "echo 'export PATH=$PATH:/new/path' >> ~/.bashrc"
stdin, stdout, stderr = ssh.exec_command(command)
output = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
 
# 打印输出
print("Output:\n", output)
if error:
    print("Error:\n", error)
 
# 重新加载配置文件
command = "source ~/.bashrc"
stdin, stdout, stderr = ssh.exec_command(command)
output = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
 
# 打印输出
print("Output:\n", output)
if error:
    print("Error:\n", error)
 
# 关闭连接
ssh.close()

4. 远程日志监控

假设你需要实时监控远程服务器上的日志文件,并在出现特定错误时发送通知。

import paramiko
import time
 
# 创建 SSH 客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
# 连接到远程服务器
ssh.connect('192.168.1.100', username='user', password='password')
 
# 打开日志文件
command = "tail -f /var/log/syslog"
stdin, stdout, stderr = ssh.exec_command(command)
 
# 实时读取日志
try:
    while True:
        line = stdout.readline()
        if line:
            print(line.strip())
            # 检查特定错误
            if "ERROR" in line:
                print("Error detected: ", line.strip())
                # 发送通知(例如通过邮件或消息服务)
except KeyboardInterrupt:
    print("Monitoring stopped.")
 
# 关闭连接
ssh.close()

这些示例展示了 ​​paramiko​​ 在不同场景下的应用,希望对你有所帮助!

paramiko​​ 是一个用于在 Python 中实现 SSH2 协议的库,它允许你远程连接到其他机器并执行命令、传输文件等。下面我将详细介绍如何使用 ​​paramiko​​ 创建一个 SSH 客户端,并通过示例代码来展示其基本用法。

1. 安装 Paramiko

首先,你需要安装 ​​paramiko​​ 库。可以通过 ​​pip​​ 来安装:

pip install paramiko

2. 基本用法

导入库

import paramiko

创建 SSH 客户端

ssh = paramiko.SSHClient()

自动添加未知主机密钥

为了简化操作,你可以设置 ​​SSHClient​​ 自动添加未知主机的密钥到本地 ​​known_hosts​​ 文件中:

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

连接到远程服务器

使用 ​​connect​​ 方法连接到远程服务器。你需要提供主机名(或 IP 地址)、用户名和密码(或私钥):

ssh.connect('hostname_or_ip', username='username', password='password')

或者使用私钥文件:

private_key = paramiko.RSAKey.from_private_key_file('/path/to/private/key')
ssh.connect('hostname_or_ip', username='username', pkey=private_key)

执行命令

连接成功后,可以使用 ​​exec_command​​ 方法执行命令:

stdin, stdout, stderr = ssh.exec_command('ls /home')
print(stdout.read().decode())

上传和下载文件

使用 ​​SFTP​​ 会话来上传和下载文件:

sftp = ssh.open_sftp()
sftp.put('/local/path/to/file', '/remote/path/to/file')  # 上传文件
sftp.get('/remote/path/to/file', '/local/path/to/file')  # 下载文件
sftp.close()

关闭连接

完成所有操作后,记得关闭 SSH 连接:

ssh.close()

完整示例

下面是一个完整的示例,展示了如何连接到远程服务器、执行命令并上传/下载文件:

import paramiko
 
# 创建 SSH 客户端
ssh = paramiko.SSHClient()
 
# 自动添加未知主机密钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 
# 连接到远程服务器
ssh.connect('hostname_or_ip', username='username', password='password')
 
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls /home')
print("Output of 'ls /home':")
print(stdout.read().decode())
 
# 上传文件
sftp = ssh.open_sftp()
sftp.put('/local/path/to/file', '/remote/path/to/file')
print("File uploaded successfully.")
 
# 下载文件
sftp.get('/remote/path/to/file', '/local/path/to/file')
print("File downloaded successfully.")
 
# 关闭 SFTP 会话
sftp.close()
 
# 关闭 SSH 连接
ssh.close()

注意事项

安全性:使用密码连接时,确保密码的安全性。如果可能,使用密钥对进行身份验证。

错误处理:在实际应用中,建议添加异常处理机制,以应对网络问题或其他异常情况。

资源管理:确保在操作完成后关闭 SFTP 会话和 SSH 连接,以释放资源。

到此这篇关于Python利用paramiko实现基本的SSH客户端操作的文章就介绍到这了,更多相关Python paramiko使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 实例讲解Python中sys.argv[]的用法

    实例讲解Python中sys.argv[]的用法

    在阅读facenet网络的代码的时候,遇到了sys.argv[]这个函数,所以下面这篇文章主要给大家介绍了关于Python中sys.argv[]用法的相关资料,需要的朋友可以参考下
    2021-06-06
  • Python获取excel内容及相关操作代码实例

    Python获取excel内容及相关操作代码实例

    这篇文章主要介绍了Python获取excel内容及相关操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 使用Python进行Ping测试的操作指南

    使用Python进行Ping测试的操作指南

    在网络工程中,Ping测试是一种常用的网络诊断工具,用于检查网络连接的可达性和响应时间,随着Python编程语言的广泛应用,越来越多的网络工程师开始使用Python进行自动化网络测试和管理任务,本篇文章将详细介绍如何使用Python进行Ping测试,需要的朋友可以参考下
    2024-06-06
  • Python爬虫实现使用beautifulSoup4爬取名言网功能案例

    Python爬虫实现使用beautifulSoup4爬取名言网功能案例

    这篇文章主要介绍了Python爬虫实现使用beautifulSoup4爬取名言网功能,结合实例形式分析了Python基于beautifulSoup4模块爬取名言网并存入MySQL数据库相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • python之消除前缀重命名的方法

    python之消除前缀重命名的方法

    今天小编就为大家分享一篇python之消除前缀重命名的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 详解Python下Flask-ApScheduler快速指南

    详解Python下Flask-ApScheduler快速指南

    Flask是Python社区非常流行的一个Web开发框架,本文将尝试将介绍APScheduler应用于Flask之中,非常具有实用价值,需要的朋友可以参考下
    2018-11-11
  • Python如何用NumPy读取和保存点云数据

    Python如何用NumPy读取和保存点云数据

    这篇文章主要介绍了Python如何用NumPy读取和保存点云数据,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • pandas数据处理基础之筛选指定行或者指定列的数据

    pandas数据处理基础之筛选指定行或者指定列的数据

    这篇文章主要介绍了pandas数据处理基础之筛选指定行或者指定列的数据的相关资料,需要的朋友可以参考下
    2018-05-05
  • Python使用Pickle模块进行数据保存和读取的讲解

    Python使用Pickle模块进行数据保存和读取的讲解

    今天小编就为大家分享一篇关于Python使用Pickle模块进行数据保存和读取的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Django项目单字段区间查询的实现

    Django项目单字段区间查询的实现

    在Django项目中会碰到一些需求就是查询某个表中的一些字段从某日到某日的数据,你可以像在SQL中那样使用SELECT语句来查找指定字段,本文就来介绍两种方法,感兴趣的可以了解一下
    2023-10-10

最新评论