Вопрос

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

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

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

Это было полезно?

Решение

Библиотеки, Обертки:

  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) сейчас нет (12.09.2017)

  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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top