библиотеки python для обработки ssh

Я собираюсь написать первый код для обработки ssh-команд на python, и я искал по stackoverflow и вижу, что есть несколько библиотек python, которые можно использовать для обработки команд, переданных через ssh, например парамико, pexpect и, возможно, некоторые другие.

в частности, мне нужно будет прочитать содержимое файлов с удаленного сервера, скопировать файлы через ssh / scp, получить вывод с удаленного сервера после запуска скрипта на удаленном сервер.

возможно, некоторые эксперты могли бы посоветовать, какая библиотека лучше и указать преимущества или недостатки?

4 ответов


Библиотеки, Фантики:

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

Примечание: примеры кода выше приведены только для получения впечатления; код не тестируется.


поскольку вы не делаете ничего особенного на уровне протокола, вам, по-видимому, не нужно, чтобы протокол был полностью реализован в python, и вы могли бы просто запускать команды ssh/scp с помощью subprocess модуль.

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

попробуйте взглянуть на Витой Рог. Он справляется со всем, что вы хотите. Если вы просто ищете передачу файлов в стиле SCP, вы всегда можете использовать модуль python secsh-filexfer.


одна из функций, которую ни одна из вышеупомянутых библиотек не предоставляет, - это одновременное подключение к нескольким серверам.В наше время,когда системным администраторам необходимо запускать команды на сотнях серверов, библиотеки, которые могут обрабатывать параллельное выполнение команд, очень важны. Две библиотеки, о которых я знаю, это:

  1. триггер

  2. параллельный-SSH

триггер намного больше, чем SSH-оболочка и более сетевая библиотека, она использует API Twisted core для включения параллельных операций ввода-вывода.

Parallel-SSH-это библиотека, которая является тонкой оболочкой над Paramiko, но использует Gevent под капотом для включения параллельных операций ввода-вывода