Библиотеки python для обработки ssh
Я собираюсь написать первый код для обработки команд ssh на python, и я выполнил поиск по stackoverflow и вижу, что существует несколько библиотек python, которые могут использоваться для обработки команд, переданных через ssh, например paramiko, pexpect и, возможно, некоторые другие.
В частности, мне нужно будет прочитать содержимое файлов с удаленного сервера, скопировать файлы через ssh/scp, получить выход с удаленного сервера после запуска script на удаленном сервере.
Возможно, некоторые эксперты могут советовать, какая библиотека лучше и указать преимущества или недостатки?
Ответы
Ответ 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)
Примечание. Приведенные выше примеры кода предназначены только для получения впечатления; код не проверен.
Ответ 2
Поскольку вы не делаете ничего особенного на уровне протокола, вам, по-видимому, не нужно, чтобы протокол полностью реализовывался в python, и вы могли просто запускать команды ssh/scp с помощью модуля subprocess
.
import subprocess
subprocess.check_call(['ssh', 'server', 'command'])
subprocess.check_call(['scp', 'server:file', 'file'])
Ответ 3
Попробуйте взглянуть на Twisted Conch. Он обрабатывает все, что вы хотите. Если вы просто искали передачу файлов в стиле SCP, вы всегда можете использовать модуль python secsh-filexfer.
Ответ 4
Единственная особенность, которой не обладает ни одна из вышеперечисленных библиотек, - это одновременное подключение к нескольким серверам. В наше время, когда администраторы системы должны запускать команды на сотнях серверов, очень важны библиотеки, которые могут выполнять параллельное выполнение команд. Я знаю, что две библиотеки:
Триггер - это нечто большее, чем обертка SSH и большая часть сетевой библиотеки, она использует API скрученного ядра для включения параллельных операций ввода-вывода.
Parallel-SSH - это библиотека, которая является тонкой оболочкой над Paramiko, но использует Gevent под капотом, чтобы разрешить параллельные операции ввода/вывода