библиотеки Python для обработки SSH
Вопрос
Я собираюсь написать первый код для обработки команд ssh на Python, я выполнил поиск по stackoverflow и увидел, что существует несколько библиотек Python, которые можно использовать для обработки команд, передаваемых через ssh, например парамико, ожидать и, возможно, некоторые другие.
В частности, мне нужно будет читать содержимое файлов с удаленного сервера, копировать файлы через ssh/scp, получать выходные данные с удаленного сервера после запуска сценария на удаленном сервере.
Возможно, некоторые эксперты могли бы посоветовать, какая библиотека лучше, и указать преимущества или недостатки?
Решение
Библиотеки, Обертки:
-
#!/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)
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.
Единственная особенность, которую не обеспечивает ни одна из вышеописанных библиотек, — это одновременное подключение к множеству серверов. В сегодняшний век, когда системным администраторам приходится запускать команды на сотнях серверов, библиотеки, которые могут обрабатывать параллельное выполнение команд, очень важны.Две библиотеки, о которых я знаю:
Trigger — это нечто большее, чем просто оболочка SSH и скорее сетевая библиотека. Он использует API ядра Twisted для обеспечения параллельных операций ввода-вывода.
Parallel-SSH — это библиотека, которая представляет собой тонкую оболочку над Paramiko, но внутри использует Gevent для включения параллельных операций ввода-вывода.