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