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

相关推荐
wanhengidc12 分钟前
短视频运营行业该如何选择服务器?
运维·服务器
雨中rain26 分钟前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
-KamMinG37 分钟前
Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行
运维·grafana
沛沛老爹39 分钟前
什么是 DevOps 自动化?
大数据·ci/cd·自动化·自动化运维·devops
永恒,怎么可能43 分钟前
关于博客系统的自动化功能测试报告
自动化·测试
Bessssss1 小时前
centos日志管理,xiao整理
linux·运维·centos
豆是浪个1 小时前
Linux(Centos 7.6)yum源配置
linux·运维·centos
vvw&1 小时前
如何在 Ubuntu 22.04 上安装 Ansible 教程
linux·运维·服务器·ubuntu·开源·ansible·devops
王铁柱子哟-1 小时前
解决 正在下载VS Code 服务器... 问题
运维·服务器
chinayu20072 小时前
虚拟机桥接模式
linux·运维·桥接模式