Python ssh远程操作:最佳实践与解决痛点
174 浏览量
更新于2024-08-29
收藏 236KB PDF 举报
本文主要探讨了使用Python进行SSH远程登录服务器的最佳实践,特别是在编写脚本时需要频繁执行远程命令的情况。传统的shell命令行方式存在输出干扰信息和代码不够优雅的问题。
在shell环境下,我们通常使用`sshpass`配合`ssh`命令来登录服务器并执行命令,例如`sshpass -p ${passwd} ssh -p ${port} -l ${user} -o StrictHostKeyChecking=no xx.xx.xx.xx ls -l`。然而,这种方式会输出一些不必要的信息,如主机名、端口、警告信息以及可能的登录失败提示。
在Python中,可以使用`subprocess`模块来执行shell命令,但这样做会同时捕获标准输出和标准错误,导致额外的清理工作。例如:
```python
import subprocess
ssh_cmd = "sshpass -p${passwd} ssh -p 22 -l root -o StrictHostKeyChecking=no xx.xx.xx.xx 'ls -l'"
status, output = subprocess.getstatusoutput(ssh_cmd)
# 数据清理和格式化操作...
```
然而,这种方式存在以下痛点:
1. 必须额外安装`sshpass`,如果未配置免密登录的话。
2. 输出中包含大量干扰信息,需要编写额外的代码进行数据清理和格式化。
3. 代码实现不够简洁和优雅。
为了解决这些问题,Python社区提供了一些专门用于SSH连接的库,如`paramiko`和`Fabric`,它们提供了更高级别的接口,使得远程执行命令变得更加方便和可控。
`paramiko`是一个纯Python实现的SSHv2协议库,它可以用来创建SSH客户端或服务器。使用`paramiko`,我们可以直接执行远程命令,而无需关心shell级别的输出清理。下面是一个使用`paramiko`的例子:
```python
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('xx.xx.xx.xx', port=22, username='root', password='${passwd}')
stdin, stdout, stderr = ssh.exec_command('ls -l')
output = stdout.read().decode('utf-8')
ssh.close()
```
`Fabric`是在`paramiko`基础上构建的一个高级接口,它简化了远程执行命令和文件传输的任务。通过`Fabric`,你可以编写更清晰的脚本,如下所示:
```python
from fabric.api import run
def remote_command():
with settings(host_string='xx.xx.xx.xx', user='root', password='${passwd}'):
result = run('ls -l')
print(result)
```
使用这些库,不仅可以避免干扰信息,还能提高代码可读性和维护性。此外,它们还支持更复杂的操作,如文件传输、错误处理和并发执行。因此,在Python中进行SSH远程登录时,推荐使用`paramiko`或`Fabric`这样的库,以获得更好的体验和控制。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-19 上传
2020-09-19 上传
2023-03-13 上传
2023-03-13 上传
2023-03-13 上传
2023-05-14 上传
weixin_38655496
- 粉丝: 5
- 资源: 932
最新资源
- PureMVC AS3在Flash中的实践与演示:HelloFlash案例分析
- 掌握Makefile多目标编译与清理操作
- STM32-407芯片定时器控制与系统时钟管理
- 用Appwrite和React开发待办事项应用教程
- 利用深度强化学习开发股票交易代理策略
- 7小时快速入门HTML/CSS及JavaScript基础教程
- CentOS 7上通过Yum安装Percona Server 8.0.21教程
- C语言编程:锻炼计划设计与实现
- Python框架基准线创建与性能测试工具
- 6小时掌握JavaScript基础:深入解析与实例教程
- 专业技能工厂,培养数据科学家的摇篮
- 如何使用pg-dump创建PostgreSQL数据库备份
- 基于信任的移动人群感知招聘机制研究
- 掌握Hadoop:Linux下分布式数据平台的应用教程
- Vue购物中心开发与部署全流程指南
- 在Ubuntu环境下使用NDK-14编译libpng-1.6.40-android静态及动态库