怎么通过Python实现linux远程登陆及sftp

1. 使用shell命令
$ sshpass -p ${passwd} ssh -p ${port} -l ${user} -o StrictHostKeyChecking=no xx.xx.xx.xx "ls -l"

然后你会发现,你的输出有很多你并不需要,但是又不去不掉的一些信息。
对于shell 命令,可以直接使用管道,或者将标准输出重定向到文件的方法取得执行结果。

2. 使用 subprocess

通过Python可以想到使用 os.popen,os.system,commands,subprocess 等一些命令执行库来间接获取系统信息 。这些库获取的 output 不仅有标准输出,还包含标准错误信息。所以每次都要对 output 进行数据清理,然后整理格式化,才能得到我们想要的数据。

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) # 数据清理

总之,间接使用ssh命令的几个问题:

需要额外安装 sshpass(如果不免密的话)

干扰信息太多,数据清理、格式化相当麻烦

代码实现不够优雅,可读性太差

ssh 连接不能复用,一次连接仅能执行一次命令

代码无法全平台,仅能在 Linux 和 OSX 上使用

立即学习“Python免费学习笔记(深入)”;

3. 使用Paramiko

安装

通义视频 通义视频

通义万相AI视频生成工具

通义视频 70 查看详情 通义视频

python3 -m pip install

方法1:基于用户名和密码的 sshclient 方式登录
该方法无法复用ssh连接。

import paramiko  ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 建立连接 ssh.connect("xx.xx.xx.xx", username="root", port=22, password="you_password")  # 使用这个连接执行命令 ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l")  # 获取输出 print(ssh_stdout.read())  # 关闭连接 ssh.close()

方法2:基于用户名和密码的 transport 方式登录
该方法可以复用连接。

import paramiko  # 建立连接 trans = paramiko.Transport(("xx.xx.xx.xx", 22)) trans.connect(username="root", password="you_passwd") ssh = paramiko.SSHClient() ssh._transport = trans  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l") print(ssh_stdout.read())  # 关闭连接 trans.close()

方法3:基于公钥的 SSHClient 方式登录
该方法无法复用ssh连接。

import paramiko  # 指定本地的RSA私钥文件 # 如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。pkey = paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa', password='12345')  # 建立连接 ssh = paramiko.SSHClient() ssh.connect(hostname='xx.xx.xx.xx',             port=22,             username='you_username',             pkey=pkey)  # 执行命令 stdin, stdout, stderr = ssh.exec_command('ls -l')  # 结果放到stdout中,如果有错误将放到stderr中 print(stdout.read())  # 关闭连接 ssh.close()

方法4:基于公钥的 Transport 方式登录
该方法可以复用连接。

import paramiko  # 指定本地的RSA私钥文件 # 如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。 pkey = paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa', password='12345')  # 建立连接 trans = paramiko.Transport(('xx.xx.xx.xx', 22)) trans.connect(username='you_username', pkey=pkey) ssh = paramiko.SSHClient() ssh._transport = trans  # 执行命令,和传统方法一样 stdin, stdout, stderr = ssh.exec_command('df -hl') print(stdout.read().decode())  # 关闭连接 trans.close()

sftp 文件传输

import paramiko  trans = paramiko.Transport(('xx.xx.xx.xx', 22))  # 建立连接 trans.connect(username='you_username', password='you_passwd')  # 实例化一个 sftp对象,指定连接的通道 sftp = paramiko.SFTPClient.from_transport(trans)  # 发送文件 sftp.put(localpath='/tmp/11.txt', remotepath='/tmp/22.txt')  # 下载文件 sftp.get(remotepath='/tmp/22.txt', localpath='/tmp/33.txt') trans.close()

以上就是怎么通过Python实现linux远程登陆及sftp的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/536535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 12:57:37
下一篇 2025年11月9日 13:02:00

相关推荐

  • 您应该在 5 年内使用的 PHP 功能

    PHP在2025年及以后仍将是Web开发的核心技术。PHP 8.x版本带来了革命性的改进,使其更强大、更高效、更易于使用。本教程将介绍PHP 8.x中一些值得关注的功能,帮助您构建可靠、面向未来的应用程序。 JIT (即时) 编译:性能飞跃 JIT编译器是PHP 8.x最显著的改进之一。它通过在运行…

    2025年12月11日
    000
  • 如何选择合适的PHP 8开发工具?

    PHP 8開發工具選擇取決於項目規模和個人偏好。主流選項包括:程式碼編輯器/IDE:VS Code:免費、輕量級、可擴展,適合各種平台。PHPStorm:強大的功能集,但收費且資源需求高。Sublime Text:輕量級、自訂性高,可用於簡單的PHP開發。除錯工具:Xdebug:配合VS Code或…

    2025年12月11日
    000
  • 如何配置PHP 8的扩展?

    如何配置 PHP 8 扩展?确认 PHP 配置文件 (php.ini) 位置。找到并更新 extension_dir 指令,指定扩展文件目录。通过在 php.ini 中添加 extension= 开头的行来启用扩展。保存 php.ini 并重启 Web 服务器或 PHP-FPM。 如何配置PHP 8…

    2025年12月11日
    000
  • 如何配置PHP 8的时区?

    PHP 8的时区配置主要依靠php.ini和源码。在源码中,使用date_default_timezone_set()函数设置时区,需指定准确的时区标识符。若使用DateTimeZone类,则可更精细地控制时区。常见错误包括忘记设置时区或使用错误的标识符,可通过date_default_timezo…

    2025年12月11日
    000
  • 如何部署PHP 8应用程序?

    部署 PHP 8 应用程序涉及以下步骤:选择 Linux 服务器并安装 PHP 8 和扩展。安装 Apache 或 Nginx 网络服务器。仔细配置 PHP 配置文件 (php.ini)。审查代码是否存在硬编码路径和环境变量依赖。使用版本控制(例如 Git)管理代码。实施自动化部署流程(例如 Ans…

    2025年12月11日
    000
  • 如何下载PHP 8?

    下载PHP 8的方法如下:直接使用预编译版本(推荐,适用于快速上手):从PHP官网下载适用于你的系统的版本。使用知名发行版(如XAMPP、WAMP)一键安装。下载源码自己编译(适用于高级用户):安装编译器(如GCC、Visual Studio)。下载PHP源码包并配置。编译并安装,注意潜在的错误。 …

    2025年12月11日
    000
  • 搭建PHP 8环境需要哪些准备工作?

    构建PHP 8环境需要以下步骤:选择操作系统,推荐Linux。安装PHP 8,同时考虑所需的扩展库。安装并配置数据库(如MySQL)。安装并配置Web服务器(如Nginx或Apache)。选择合适的开发工具(如PHPStorm或VS Code)。 搭建PHP 8环境? 这问题问得妙啊,看似简单,其实…

    2025年12月11日
    000
  • 如何安装PHP 8?

    安装PHP 8步骤:更新软件包列表(例如,在 Ubuntu 上使用 sudo apt update)。安装 PHP 8(例如,在 Ubuntu 上使用 sudo apt install php8.1)。根据需要安装与 Web 服务器(例如 Apache 或 Nginx)交互的模块(例如,在 Ubun…

    2025年12月11日
    000
  • 在您的计算机上本地运行 WordPress

    在计算机上本地运行 wordpress 是在网站上线之前开发和测试网站的好方法。这是分步指南: 要求 web 服务器软件:apache 或 nginx。数据库:mysql 或 mariadb。php:与 wordpress 兼容的版本(建议使用 php 7.4 或更高版本)。本地服务器工具:安装以下…

    2025年12月11日
    000
  • 通过直接 AWS Lambda 调用简化内部 API

    这是文档的改进和完善版本:通过直接 aws lambda 调用简化内部 api 使用面向服务的架构 (soa) 系统时,您可能需要一个内部 api 来进行服务之间的通信。一种常见的方法是将 aws lambda 与 api 网关结合使用。然而,对于内部 api,有一个更简单、更高效的选择:直接调用 …

    2025年12月11日
    000
  • PHP 7.3 编译安装指南

    要编译和安装 PHP 7.3,请按照以下步骤操作:安装先决条件:GCC 或 Clang 编译器、Autoconf、Automake、Libtool、Make、Bison、Flex、OpenSSL、zlib、libjpeg、libpng、libxml2 和 libxslt。下载 PHP 7.3 源代码…

    2025年12月11日
    000
  • linux下 如何调试php

    在 Linux 下调试 PHP 有以下方法:Xdebug:提供强大的调试功能,包括断点、变量检查和异常处理。phpdbg:交互式调试器,提供命令行界面、断点和变量检查。其他工具:黑屏(IDE 扩展)、Geany(文本编辑器)提供额外的调试支持。 Linux 下调试 PHP 1. Xdebug: Xd…

    2025年12月11日
    000
  • PHP 7.3.4 中preg_replace()函数失效:为何我的正则表达式无法去除多余换行符?

    php 7.3.4 中 preg_replace() 失效的原因 你在使用 php 中的 preg_replace() 函数去除多余的换行符时遇到问题。虽然你在 python 中使用了类似的正则表达式并成功了,但 php 中却出现了问题。 出现这种情况的原因在于,不同平台以不同的方式保存文件中的换行…

    2025年12月11日
    000
  • Python如何实现PHP的array_column函数功能?

    python 中实现类似 php array_column 方法 在 php 中,array_column() 函数用于从多维数组中提取特定列的值或键值对。在 python 中,可以通过编写自定义函数来实现类似的功能。 要提取特定列的值,可以编写以下函数: def extract_column(da…

    2025年12月11日
    000
  • Python如何模拟PHP的array_column函数?

    使用 python 模拟 php array_column 方法 在 php 中,array_column 方法可用于从多维数组中提取指定列的值。本文将介绍如何使用 python 模拟该方法。 为了实现类似 php 中的 array_column 的功能,可以将数据封装成两个方法: def extr…

    2025年12月11日
    000
  • Linux系统下PHP如何读取Word文档数据?

    PHP 在 Linux 系统读取 Word 文档数据 在 PHP 环境中,使用 com_dotnet 扩展插件读取 Word 文档数据在 Windows 系统中是一种常见的做法。但是,当将项目迁移到 Linux 系统时,开发者可能会遇到扩展插件缺失的问题。 这是因为 COM(组件对象模型)是一项仅限…

    2025年12月10日
    000
  • Linux系统下如何用PHP读取Word文档?

    Linux 系统下运行 COM 扩展读取 Word 文档 在 Windows 系统下使用 PHP COM 扩展插件读取 Word 文档数据的方法,在 Linux 系统下无法直接运行,因为 COM 扩展仅适用于 Windows 系统。 因此,在 Linux 系统中读取 Word 文档数据,需要考虑使用…

    2025年12月10日
    000
  • LAMP环境下如何集成Node.js或Python应用?

    通过 LAMP 搭建网站启动 Node.js 或 Python 您当前使用 LAMP(Linux、Apache、MySQL、PHP)搭建了一个网站,并希望在该网站上响应来自 Node.js 或 Python 任务的网络请求。以下是如何实现该目标: 使用代理 您可以使用 Apache 或 Nginx …

    2025年12月10日
    000
  • LAMP环境下PHP如何启动Node.js或Python任务响应网络请求?

    在 LAMP 中使用 PHP 启动 Node.js 或 Python 任务,响应网络请求 问题:能否在 LAMP(Linux Apache MySQL PHP) 架构搭建的网站中,通过 PHP 启动 Node.js 或 Python 任务,以响应网络请求? 答案: 可以通过以下两种方式: 立即学习“…

    2025年12月10日
    000
  • ReactPHP是如何实现非阻塞式I/O的?

    ReactPHP 非阻塞式 I/O ReactPHP 是一套 PHP 库,它以非阻塞式 I/O 方式运行。非阻塞式 I/O 意味着什么? 该文档指出:”ReactPHP 默认采用非阻塞式运行。使用 worker 处理阻塞式 I/O。” 从本质上讲,ReactPHP 仿造了 N…

    2025年12月10日
    000

发表回复

登录后才能评论
关注微信