用于ssh处理的python库

yar*_*art 26 python ssh paramiko pexpect libraries

我打算写第一个代码有关Python处理SSH命令,我也搜索过计算器,可以看到有可用于处理通过ssh过去了,像命令几个Python库的paramiko,Pexpect的,也许一些人.

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

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

Tob*_*obu 25

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

import subprocess
subprocess.check_call(['ssh', 'server', 'command'])
subprocess.check_call(['scp', 'server:file', 'file'])
Run Code Online (Sandbox Code Playgroud)

  • 不知道你为什么会被投票,但我已经环顾四周,这仍然是那些在他们不想安装一套库的机器上工作的人的最佳解决方案. (5认同)
  • 投反对票的原因:依赖于外部二进制文件。不跨平台。不是程序化的,因为依赖于外部提供的配置和密钥。运行顺序子进程有很多开销,并且不能很好地扩展多个远程主机。还有更多,但这些是重要的。 (3认同)
  • @wobbily_col 我确信确实如此,但是,OP 专门要求提供 python 库。OpenSSH 二进制文件不是。 (2认同)

mik*_*iku 24

图书馆,包装:

  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"
    
    Run Code Online (Sandbox Code Playgroud)

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()
    
    Run Code Online (Sandbox Code Playgroud)

注意:上面的代码示例仅用于获取展示; 代码未经过测试.


Ami*_*tad 6

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

  1. 扳机

  2. 并行 SSH

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

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