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

# 用 Paramiko,轻松掌控远程服务器

文章目录

      • 用 Paramiko,轻松掌控远程服务器
        • 一、背景
        • 二、什么是 Paramiko
        • 三、安装 Paramiko
        • 四、库函数使用方法
        • 五、使用场景
        • 六、常见问题及解决方案
        • 七、总结

在这里插入图片描述

用 Paramiko,轻松掌控远程服务器

一、背景

在日常的开发和运维工作中,我们常常需要与远程服务器进行交互,比如执行命令、上传下载文件等。传统的手动操作不仅效率低下,还容易出错。而 Paramiko
正是为了解决这些问题而生。它是一个强大的 Python 第三方库,专门用于实现 SSHv2 协议,能够让我们通过 Python
脚本轻松地对远程服务器进行各种操作。接下来,就让我们深入了解这个强大的工具。

二、什么是 Paramiko

Paramiko 是一个基于 Python 实现的 SSHv2 协议库,它提供了客户端和服务器功能。它实现了完整的 SSHv2
协议,包括密钥认证、消息加密和会话管理,能够确保通信的安全性。通过 Paramiko,我们可以方便地进行 SSH 连接、执行远程命令、上传下载文件等操作。

三、安装 Paramiko

由于 Paramiko 是一个第三方库,我们需要通过命令行进行安装。安装命令如下:

bash复制

pip install paramiko
四、库函数使用方法
  1. 创建 SSH 客户端

Python复制

    import paramiko

ssh = paramiko.SSHClient()

这行代码创建了一个 SSH 客户端实例,用于后续的连接和操作。

  1. 设置主机密钥策略

Python复制

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

这行代码设置了主机密钥策略,AutoAddPolicy 会自动将远程主机的密钥添加到本地的 known_hosts 文件中,避免手动确认主机密钥。

  1. 连接远程服务器

Python复制

    ssh.connect('your_server_ip', port=22, username='your_username', password='your_password')

这行代码用于连接远程服务器,需要指定服务器的 IP 地址、端口号、用户名和密码。

  1. 执行远程命令

Python复制

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

这行代码执行了一个远程命令(ls -l),并通过 stdout.read().decode() 获取命令的输出结果。

  1. 关闭连接

Python复制

    ssh.close()

这行代码关闭了与远程服务器的连接,释放资源。

五、使用场景
  1. 执行远程命令

Python复制

    import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
ssh.close()

在这个场景中,我们通过 Paramiko 连接到远程服务器并执行了一个简单的 ls -l 命令,然后打印出命令的输出结果。

  1. 上传文件

Python复制

    import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
sftp = ssh.open_sftp()
sftp.put('local_file.txt', 'remote_file.txt')
sftp.close()
ssh.close()

在这个场景中,我们使用 Paramiko 的 SFTP 功能将本地文件 local_file.txt 上传到远程服务器的
remote_file.txt

  1. 下载文件

Python复制

    import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
sftp = ssh.open_sftp()
sftp.get('remote_file.txt', 'local_file.txt')
sftp.close()
ssh.close()

在这个场景中,我们使用 Paramiko 的 SFTP 功能从远程服务器下载文件 remote_file.txt 到本地的
local_file.txt

  1. 使用密钥登录

Python复制

    import paramiko

private_key = paramiko.RSAKey.from_private_key_file('path_to_your_private_key')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
ssh.close()

在这个场景中,我们使用私钥文件进行身份验证,而不是传统的用户名和密码。

  1. 批量执行命令

Python复制

    import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('your_server_ip', username='your_username', password='your_password')
commands = ['ls -l', 'date', 'whoami']
for command in commands:
    stdin, stdout, stderr = ssh.exec_command(command)
    print(stdout.read().decode())
ssh.close()

在这个场景中,我们通过 Paramiko 连接到远程服务器后,依次执行了多个命令,并打印出每个命令的输出结果。

六、常见问题及解决方案
  1. 问题:连接时提示“Authentication failed”
*  **错误信息**

Authentication failed.

*  **原因** :用户名或密码错误,或者私钥文件路径错误。

*  **解决方案**

  * 确保用户名和密码正确无误。

  * 如果使用私钥登录,检查私钥文件路径是否正确,私钥文件的权限是否正确(私钥文件的权限应为 600)。
  1. 问题:执行命令时没有输出
*  **错误信息**

stdout.read() 返回空值

*  **原因** :可能是命令执行失败,或者命令没有输出。

*  **解决方案**

  * 检查命令是否正确执行,可以通过 `stderr.read()` 检查是否有错误信息。

  * 确保命令有输出,例如执行 `ls -l` 应该有目录列表的输出。
  1. 问题:连接时提示“SSHException: No host key for host”
*  **错误信息**

SSHException: No host key for host

*  **原因** :没有将远程主机的密钥添加到本地的 `known_hosts` 文件中。

*  **解决方案**

  * 在连接之前,使用 `ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())` 自动添加主机密钥。
七、总结

Paramiko 是一个功能强大的 Python 第三方库,它为我们提供了便捷的 SSH
连接和操作功能。通过它可以轻松地执行远程命令、上传下载文件,甚至使用密钥进行身份验证。虽然在使用过程中可能会遇到一些问题,但只要掌握正确的方法,就能轻松解决。总之,Paramiko
是一个值得我们深入学习和使用的工具,它将大大提高我们对远程服务器的操作效率。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

在这里插入图片描述

http://www.dtcms.com/a/91488.html

相关文章:

  • 0基础 | 制作麦克风音频放大电路
  • 使用redis设置店铺状态
  • 【ESP32-C2】基于 esptool 完成 Secure Boot V2 和 Flash 加密 Development 模式的完整指令序列
  • 遥控器钥匙学习---通过uds指令
  • How to share files with Linux mint 22 via samba in Windows
  • spring - 十二种事务失效场景
  • python虚拟环境安装opus(windows)
  • 大模型重点1 【综述-文字版】
  • 深度解析提示词工程:让AI成为你的超级助手(2025实战指南)
  • CI/CD(四) docker-compose 安装harbor
  • WebGPU 是比 WASM 更好的选择吗? (Is WebGPU a Better Choice Than WASM? )
  • 鸿蒙开发之背景图片的使用
  • mongoShake数据迁移
  • 什么是Vue.js
  • 网管软件Zabbix3.4.8 使用笔记 - 更改记录保留的时间 20250325
  • 【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细)
  • 深入理解数据类型、建表与数据库引擎
  • K8S——PaaS平台pod调度机制
  • Rust从入门到精通之进阶篇:16.智能指针
  • 选素数--线性筛
  • 网络基础-路由器和交换机工作配置
  • Redis--redis客户端
  • NodeJs之fs模块
  • Gunicorn部署指南:核心参数详解与实践
  • (UI自动化测试web端)第二篇:元素定位的方法_css定位之ID选择器
  • 【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发
  • 从输入 URL 到页面加载完成,发生了什么?
  • sql结尾加刷题
  • 【LeetCode 题解】算法:4.寻找两个正序数组的中位数
  • Spring WebSecurityCustomizer 的作用