【问题标题】:SSH Connection with Python 3.0与 Python 3.0 的 SSH 连接
【发布时间】:2010-10-31 12:12:21
【问题描述】:

如何在 Python 3.0 中建立 SSH 连接?我想将文件保存在设置了无密码 SSH 的远程计算机上。

【问题讨论】:

    标签: python file ssh


    【解决方案1】:

    我建议将 ssh 作为子进程调用。它可靠且便携。

    import subprocess
    proc = subprocess.Popen(['ssh', 'user@host', 'cat > %s' % filename],
                            stdin=subprocess.PIPE)
    proc.communicate(file_contents)
    if proc.retcode != 0:
        ...
    

    您必须担心引用目标文件名。如果您想要更大的灵活性,您甚至可以这样做:

    import subprocess
    import tarfile
    import io
    tardata = io.BytesIO()
    tar = tarfile.open(mode='w:gz', fileobj=tardata)
    ... put stuff in tar ...
    proc = subprocess.Popen(['ssh', 'user@host', 'tar xz'],
                            stdin=subprocess.PIPE)
    proc.communicate(tardata.getvalue())
    if proc.retcode != 0:
        ...
    

    【讨论】:

    • proc.communicate(tardata) 说 TypeError: must be string or buffer, not _io.BytesIO
    • 那么tardata.getvalue()有你的答案
    【解决方案2】:

    您希望将所有 ssh 功能实现为 python 库吗?看看 paramiko,虽然我认为它还没有移植到 Python 3.0(还没有?)。

    如果您可以使用现有的 ssh 安装,则可以使用 Dietrich 描述的 subprocess 方式,或者(另一种方式)您也可以使用 pexpect (website here)。

    【讨论】:

    • 那个 OP 要求提供 Python 3 选项,但你还是提到了 paramiko。但我同意投反对票是不应该的,因为这不是你所说的全部。原谅我。
    • paramiko homepage 现在声明它也适用于 python 3.3+。引用:“Paramiko 是 SSHv2 协议 [1] 的 Python(2.6+,3.3+)实现,提供客户端和服务器功能......”
    【解决方案3】:

    第一:

    无密码ssh登录两步

    在您的终端中

    [macm@macm ~]$  ssh-keygen
    [macm@macm ~]$  ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@192.168.1.XX <== change
    

    现在使用 python

    from subprocess import PIPE, Popen
    
    cmd = 'uname -a'
    stream = Popen(['ssh', 'root@192.168.1.XX', cmd],
                        stdin=PIPE, stdout=PIPE)
    
    rsp = stream.stdout.read().decode('utf-8')
    print(rsp)
    

    【讨论】:

      【解决方案4】:

      这可能需要一些工作,因为“twisted:conch”似乎没有 3.0 版本。

      【讨论】:

        【解决方案5】:

        我写了Python bindings for libssh2,它在 Python 2.4、2.5、2.6、2.7 和 3 上运行。

        【讨论】:

          【解决方案6】:

          libssh2 适用于 Python 3.x。
          请参阅此堆栈溢出文章 How to send a file using scp using python 3.2?

          【讨论】:

          • 没有可用的文档。 pypi项目页面的链接失效了!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-05
          • 1970-01-01
          • 2019-06-04
          • 1970-01-01
          • 2013-09-10
          • 2018-12-16
          • 2013-07-18
          相关资源
          最近更新 更多