使用Python在树莓派上进行SSH/SCP(或类似操作)

1 投票
2 回答
2490 浏览
提问于 2025-05-01 04:42

我想用Python从我的Windows电脑通过Cygwin复制一个文件到我的树莓派上。我知道可以用像FileZilla这样的程序,但我的项目需要通过编程的方式来完成这个操作。

我知道有一些模块可以让我在Python中使用SSH,但我对树莓派和Python都很陌生,安装命令行模块时遇到了一些问题。有没有人愿意给我一些关于如何安装正确模块的指导,比如paramiko或者类似的模块,让它能在我的树莓派上运行?

如果能给我一些示例代码,让我能快速上手,那就太好了。不过我知道网上有其他相关的讨论,所以如果你不想浪费时间在这方面也没关系,除非你愿意。提前谢谢你的帮助。

暂无标签

2 个回答

1

如果你的运行环境里安装了scp,你可以直接在Python中运行scp命令,这样做比较简单。不过,scp每次都会要求你输入密码,所以我推荐下面这种方法:

1) 在你的运行机器上生成一个RSA密钥对:在bash中运行这个命令并按照提示操作,你可以选择是否使用密码短语:

ssh-keygen

现在你会在你存放密钥的地方得到一个.pub文件。把这个.pub文件的内容添加到你的树莓派上的以下文件中:

~/.ssh/authorized_keys

当然,如果.ssh文件夹和这个文件不存在,你需要先创建它们。如果authorized_keys文件已经存在,就在文件末尾添加.pub文件的内容,记得在新的一行开始,这样就不会覆盖原来的内容。一旦完成,你的树莓派就会信任你的电脑,连接时就不会再要求输入密码了(所以要保密哦!)。如果你更喜欢每次运行脚本时都输入密码,那就不要把这个密钥添加到authorized_keys里。

现在在你的Python脚本中:

import os
cmd = os.popen('scp <USER>@<YOUR_MACHINE_ADDRESS>:<LOCATION_OF_THE_REMOTE_FILE> <LOCATION_TO_STORE_IT>')
cmd.read()

这样就可以从你的树莓派复制文件到你的电脑,如果你想反过来做,只需交换scp的两个参数。

当然,你可以根据需要在命令周围创建逻辑结构,以决定给它哪些参数以及在什么情况下执行它。要知道,使用os.popen()时,程序会一直等待,直到命令执行完毕,而且命令不会执行,直到调用cmd.read()

如果你不喜欢这种方法,可以看看这里以及这个问题中提供的链接。

0

你可以考虑使用 ftplib 这个库,它是 Python 的一个库。这样你就可以通过像 Filezilla 这样的图形界面客户端来复制文件,也可以通过编程的方式来实现。

from ftplib import FTP

在树莓派那边,你需要启动一个 FTP 服务器(比如 ftpdvsftpd 等等),在 Debian 系统上有很多这样的选择。在客户端,你可以使用图形界面的客户端,或者自己写一个程序,比如用 Python!

如果你需要一个加密的解决方案,可以在 FTP 上使用 TLS 或 SSL。

撰写回答