用于 ssh 处理的 python 库

问题描述 投票:0回答:4

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

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

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

python ssh libraries paramiko pexpect
4个回答
31
投票

由于您在协议级别没有做任何特殊的事情,因此您可能不需要完全在 python 中实现协议,并且您可以简单地使用

subprocess
模块运行 ssh/scp 命令。

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

28
投票

库、包装器:

  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()
    

注意:上面的代码示例只是为了获得一个印象;代码未经测试。


7
投票

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

  1. 触发

  2. 并行 SSH

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

Parallel-SSH 是一个库,它是 Paramiko 的薄包装器,但在底层使用 Gevent 来启用并发 I/O 操作。


3
投票

尝试看看扭曲海螺。 它可以处理你想要的一切。 如果您只是在寻找 SCP 风格的文件传输,您始终可以使用 python 模块 secsh-filexfer

© www.soinside.com 2019 - 2024. All rights reserved.