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服务器、执行命令、传输文件和关闭连接。有了这些基础知识,你可以自动执行日常任务,节省大量的时间和精力。更多内容请参考官方文档,自动化快乐!

相关推荐
眠修2 分钟前
Kuberrnetes 服务发布
linux·运维·服务器
好奇的菜鸟1 小时前
Docker 配置项详解与示例
运维·docker·容器
xcs194051 小时前
集运维 麒麟桌面版v10 sp1 2403 aarch64 离线java开发环境自动化安装
运维·自动化
BAOYUCompany1 小时前
暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
运维·服务器
超龄超能程序猿2 小时前
Bitvisse SSH Client 安装配置文档
运维·ssh·github
奈斯ing2 小时前
【Redis篇】数据库架构演进中Redis缓存的技术必然性—高并发场景下穿透、击穿、雪崩的体系化解决方案
运维·redis·缓存·数据库架构
鳄鱼皮坡3 小时前
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
运维·服务器
即将头秃的程序媛3 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
AiTEN_Robot3 小时前
AGV 无人叉车关键技术问题解析:精准定位算法 / 安全避障逻辑 / 系统对接协议全方案
人工智能·机器人·自动化·制造
小Mie不吃饭3 小时前
FastAPI 小白教程:从入门级到实战(源码教程)
运维·服务器