Paramiko实现SSH自动化实战教程

你是否厌倦了手动登录远程服务器并执行日常任务?SSH任务可以自动化编程实现,能欧节省大量的时间和精力。在本文中,我们将探索如何使用Paramiko(Python库)来自动执行SSH任务。

Paramiko 简介

Paramiko是Python库,支持与SSH服务器进行交互。它提供易于使用的界面,用于登录、执行命令、传输文件和管理SSH密钥。Paramiko同时支持SSHv2和SFTP协议,使其成为通用自动化任务工具。

安装paramiko

在我们使用Paramiko之前,需要安装它。你可以使用Python包管理器pip安装Paramiko。打开终端窗口,输入以下命令:

shell 复制代码
pip install paramiko

Paramiko 实战

连接SSH服务器

要使用Paramiko连接到SSH服务器,我们首先需要创建SSH客户端对象。我们可以通过导入SSHClient类并创建一个实例来实现:

python 复制代码
import paramiko

ssh = paramiko.SSHClient()

缺省情况下,Paramiko不信任任何SSH服务器。因此,我们需要启用主机密钥检查,以确保我们连接到一个受信任的服务器。我们可以通过在SSH客户端对象上调用set_missing_host_key_policy方法来做到这一点:

python 复制代码
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

现在我们已经设置了主机密钥策略,我们可以通过调用SSH客户端对象上的connect方法连接到SSH服务器:

python 复制代码
ssh.connect('example.com', username='myuser', password='mypassword')

将example.com替换为SSH服务器的主机名或IP地址,将myuser替换为您的用户名,将mypassword替换为您的密码。

如果您想使用SSH密钥而不是密码进行连接,可以使用以下代码:

python 复制代码
ssh.connect('example.com', username='myuser', key_filename='/path/to/keyfile')

将/path/to/keyfile替换为SSH私钥的路径。

执行命令

现在我们已经连接到SSH服务器,我们可以使用exec_command方法在其上执行命令:

python 复制代码
stdin, stdout, stderr = ssh.exec_command('ls')
print(stdout.read().decode())

这段代码在远程服务器上执行ls命令,并将输出打印到控制台。exec_command方法返回三个类文件对象:stdin、stdout和stderr。我们可以通过调用stdout对象上的read方法来读取命令的输出。

我们也可以通过创建shell对象,并可以在单个SSH会话中执行多条命令:

python 复制代码
shell = ssh.invoke_shell()
shell.send('ls\n')
shell.send('pwd\n')
shell.send('whoami\n')
output = shell.recv(65535).decode()
print(output)

这段代码在远程服务器上打开交互式shell,并向它发送三个命令。我们可以通过调用shell对象上的recv方法来读取命令输出。

完整示例

本节展示如何使用用户名和密码对远程服务器进行身份验证。下面代码需要替换 "YOUR_IP_ADDRESS"、"YOUR_LIMITED_USER_ACCOUNT" 和 "YOUR_PASSWORD" 的值。如果需要,使用查找连接主机的IP地址。

python 复制代码
# first_experiment.py
import paramiko

command = "df"

# Update the next three lines with your
# server's information

host = "YOUR_IP_ADDRESS"
username = "YOUR_LIMITED_USER_ACCOUNT"
password = "YOUR_PASSWORD"

client = paramiko.client.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=username, password=password)
_stdin, _stdout,_stderr = client.exec_command("df")
print(_stdout.read().decode())
client.close()

虽然上面Paramiko示例也可以用shell命令完成,但Paramiko提供了Python的所有功能。Python能够访问结构化数据、循环、解析和其他强大的功能,这些功能超出了shell脚本所提供的功能。例如,如果你正在编写计算系统使用百分比的程序,那么Python更擅长从系统输出中提取和计算值。

传输文件

Paramiko还支持使用SFTP协议在本地机器和远程服务器之间传输文件。要传输文件,我们首先需要创建SFTP客户端对象:

复制代码
sftp = ssh.open_sftp()

然后,我们可以使用put方法将文件从本地机器上传到远程服务器:

python 复制代码
sftp.put('/path/to/local/file', '/path/to/remote/file')

将"/path/to/local/file"替换为要上传的本地文件路径,将"/path/to/remote/file"替换为要创建的远程文件路径。

类似地,我们可以使用get方法从远程服务器下载文件到本地机器:

python 复制代码
sftp.get('/path/to/remote/file', '/path/to/local/file')

将"/path/to/remote/file"替换为需要下载的远程文件路径,将"/path/to/local/file"替换为需要创建的本地文件路径。

关闭连接

一旦完成了SSH会话,我们应该关闭到服务器的连接:

python 复制代码
ssh.close ()

这可能存在潜在的安全风险,关闭连接不会流行任何已打开的连接。

最后总结

本文我们介绍了如何使用Paramiko来自动执行SSH任务。包括连接到SSH服务器、执行命令、传输文件和关闭连接。有了这些基础知识,你可以自动执行日常任务,节省大量的时间和精力。更多内容请参考官方文档,自动化快乐!

相关推荐
七夜zippoe18 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64819 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满19 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠20 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90320 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技21 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀21 小时前
Linux环境变量
linux·运维·服务器
zzzsde21 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º1 天前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~1 天前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化