【问题标题】:python libraries for ssh handling用于 ssh 处理的 python 库
【发布时间】:2010-12-28 16:30:54
【问题描述】:

我将编写第一个在 python 上处理 ssh 命令的代码,我在 stackoverflow 上进行了搜索,可以看到有几个 python 库可用于处理通过 ssh 传递的命令,例如paramiko、@ 987654322@ 可能还有其他一些。

特别是,我需要从远程服务器读取文件内容,通过 ssh/scp 复制文件,在远程服务器上启动脚本后从远程服务器获取输出。

也许一些专家可以建议哪个库更好并指定优点或缺点?

【问题讨论】:

    标签: python ssh libraries paramiko pexpect


    【解决方案1】:

    尝试查看Twisted Conch。它处理你想要的一切。如果你只是在寻找 SCP 风格的文件传输,你总是可以使用 python 模块secsh-filexfer

    【讨论】:

    • secsh-filexfer 链接已失效。
    【解决方案2】:

    库、包装器:

    1. http://www.lag.net/paramiko/

      #!/usr/bin/env python
      import paramiko
      from contextlib import contextmanager
      host = '192.168.10.142'
      username = 'slacker'
      password = 'password'
      def create_ssh(host=host, username=username, password=password):
          ssh = paramiko.SSHClient()
          ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
          try:
             print "creating connection"
             ssh.connect(host, username=username, password=password)
             print "connected"
             yield ssh
          finally:
             print "closing connection"
             ssh.close()
             print "closed"
      

    1) 利用 2) 并提供一些更高级别的功能。如果后者符合您的要求,我建议您尝试 1)


    更新:1) 现已消失 (2017-09-12)

    1. http://media.commandline.org.uk/code/ssh.txt(示例用法:https://zeth.net/archive/2008/05/29/sftp-python-really-simple-ssh/

      s = ssh.Connection('example.com', 'warrior', password = 'lennalenna')
      s.put('/home/warrior/hello.txt', '/home/zombie/textfiles/report.txt')
      s.get('/var/log/strange.log', '/home/warrior/serverlog.txt')
      s.execute('ls -l')
      s.close()
      

    注意:以上代码示例仅供参考;代码未经测试。

    【讨论】:

      【解决方案3】:

      由于您在协议级别没有做任何特别的事情,因此您可能不需要完全在 python 中实现该协议,您可以使用 subprocess 模块简单地运行 ssh/scp 命令。

      import subprocess
      subprocess.check_call(['ssh', 'server', 'command'])
      subprocess.check_call(['scp', 'server:file', 'file'])
      

      【讨论】:

      • 不知道为什么你被否决了,但我环顾四周,对于那些在不想安装一组库的机器上运行代码的人来说,这仍然是最好的解决方案.
      • 是的。它还将利用主机别名、ProxyCommands 和其他 ~/.ssh/config 设置。
      • 投反对票的原因:依赖于外部二进制文件。不跨平台。不是程序化的,因为依赖于外部提供的配置和密钥。运行顺序子进程有很多开销,并且对于多个远程主机不能很好地扩展。还有更多,但这些是重要的。
      • @danny,它与我的用例完美匹配,我相信它适用于许多其他人。
      • @wobbily_col 我确信确实如此,但是,OP 专门要求提供 python 库。 OpenSSH 二进制文件不是它。
      【解决方案4】:

      以上讨论的库都没有提供的一个功能是与多个服务器的并发连接。在当今系统管理员需要在数百台服务器上运行命令的时代,可以处理并行命令执行的库非常重要。我知道的两个库是:

      1. Trigger

      2. Parallel-SSH

      Trigger 不仅仅是一个 SSH 包装器,更是一个网络库,它利用 Twisted 核心 API 来启用并发 I/O 操作。

      Parallel-SSH 是一个对 Paramiko 进行精简包装的库,但在底层使用 Gevent 来启用并发 I/O 操作

      【讨论】:

      • 第二个并发点。此外,Parallel-SSH 尤其支持原生 SFTP 以及代理和代理转发等 SSH 功能,所有这些都通过 gevent 使用异步网络 I/O。
      猜你喜欢
      • 2016-12-19
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      相关资源
      最近更新 更多