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

相关推荐
H1346948902 分钟前
局域网数据同步软件,局域网数据备份的方法
运维·服务器·负载均衡
ORIPID1 小时前
Ubuntu完整复制其他用户的anaconda及虚拟环境
linux·运维·ubuntu
plmm烟酒僧6 小时前
使用 Tmux 在断开SSH连接后,保持会话的生命周期
运维·ssh·tmux·分离会话
多多*9 小时前
Java设计模式 简单工厂模式 工厂方法模式 抽象工厂模式 模版工厂模式 模式对比
java·linux·运维·服务器·stm32·单片机·嵌入式硬件
南鸳61010 小时前
Linux常见操作命令(2)
linux·运维·服务器
Kaede610 小时前
怎么安装JSON服务器?JSON服务器最新安装教程
运维·服务器·json
西北大程序猿11 小时前
linux进程信号 ─── linux第27课
linux·运维·服务器·信号处理
inxunoffice12 小时前
批量给 PDF 添加或删除密码保护,支持设置打开密码、只读密码、限制复制和打印
运维·服务器·pdf
Brandon汐14 小时前
Linux中常用的文件管理命令
linux·运维·服务器
Vacancy空白15 小时前
【Ubuntu常用命令】
linux·运维·ubuntu·ssh