当前位置: 首页 > article >正文

Paramiko实现SSH自动化实战教程

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

Paramiko 简介

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

安装paramiko

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

pip install paramiko

Paramiko 实战

连接SSH服务器

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

import paramiko

ssh = paramiko.SSHClient()

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

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

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

ssh.connect('example.com', username='myuser', password='mypassword')

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

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

ssh.connect('example.com', username='myuser', key_filename='/path/to/keyfile')

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

执行命令

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

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

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

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

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地址。

# 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方法将文件从本地机器上传到远程服务器:

sftp.put('/path/to/local/file', '/path/to/remote/file')

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

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

sftp.get('/path/to/remote/file', '/path/to/local/file')

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

关闭连接

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

ssh.close ()

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

最后总结

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


http://www.kler.cn/news/365190.html

相关文章:

  • BiGRU实现中文关系抽取算法
  • 数字图像处理的概念(一)
  • Python中input()输入函数和print()输出函数的用法
  • Ribbon客户端负载均衡策略测试及其改进
  • leetCode算法题爬楼梯递归写法
  • traceroute或tracepath区别
  • 2024-09学习笔记
  • TCP/UDP 通用通信代码库(C语言实现)
  • java高性能处理10G大文件
  • 使用Vue.js构建响应式Web应用
  • [DB] NSM
  • 【python openai function2json小工具】
  • 在PHP中,读取大文件
  • html+css+js实现Notification 通知
  • 洞察云上风险,主机安全尽在掌握
  • 【LeetCode】1297、子串的最大出现次数
  • AI 开启财富密码:探索多元化赚钱之路
  • 【PyTorch][chapter31][transformer-4]
  • sharpkeys-键盘部分按键不好用,用其它不常用按键代替
  • 【机器学习】13. 决策树
  • 现代Web界面交互新利器!来探一探这个魔法组件库——MagicUI
  • 【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)
  • 系统架构设计师教程 第18章18.8 安全架构设计案例分析 笔记
  • Android修改第三方应用相机方向
  • paddleocr使用FastDeploy 部署工具部署 rknn 模型
  • 250MS/s 4通道16bit PCIE采集卡