Python ssh远程操作:最佳实践与解决痛点
81 浏览量
更新于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-12-25 上传
2018-08-07 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38655496
- 粉丝: 5
- 资源: 932
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构