【问题标题】:SSH/SCP (Or similar) with python on raspberry pi在树莓派上使用 python 的 SSH/SCP(或类似的)
【发布时间】:2014-11-03 04:41:41
【问题描述】:

我需要使用 cygwin 从我的 windows 机器上复制一个文件到我的树莓派上。我知道我可以使用 filezilla 之类的程序,但我的项目需要以编程方式执行此操作。

我知道有些模块允许我在 python 中进行 SSH,但我是 raspberry pi 和 python 的新手,我在从命令行安装模块时遇到问题。有人愿意就安装正确的模块(如 paramiko 或类似模块)给我一些指导,让它在我的 pi 上工作吗?

让我启动并运行的示例代码也很棒,但我知道代码上还有其他线程,所以你不需要在这上面浪费时间,除非你有这种倾向。提前感谢您的帮助。

【问题讨论】:

    标签: python ssh raspberry-pi


    【解决方案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(),命令才会执行

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

    【讨论】:

    • 非常感谢。操作系统是内置在 python 中的吗?我遇到的一个问题是,虽然这适用于我在 Windows 上的测试,但我最终将用于项目的机器在我的网络上启用 SSH 之后将无法访问。
    【解决方案2】:

    您可以从python libraries 考虑ftplib。然后,您将能够使用 Filezila 等 GUI 客户端和以编程方式复制文件。

    from ftplib import FTP
    

    在 Raspberry 方面,您必须启动一个 FTP 服务器(ftpdvsftpd 等),它们在 Debian 上非常多。在客户端,您可以使用 GUI 客户端或像在 python 中一样制作自己的程序!

    如果您需要加密解决方案,您可以使用 TLS 或 SSL over FTP。

    【讨论】:

    • 这解决了我能够让模块在我的 pi 上运行的主要问题。我尝试为此安装的大多数模块,例如我尝试在命令行中安装的 paramiko,但遇到了问题。对于 TLS 或 SSL,您会推荐哪些模块?
    • 模块ftplib允许你使用SSL认证,它是内置的。
    猜你喜欢
    • 2017-11-12
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多