Быстрый в изучении - мощный в программировании
Скрипт ИНВЕСТОР на Python

Попробуйте себя в качестве инвестора имея в помощники мощный алгоритм советника на Python...

Все уроки по PyQt5

PyQt5 реализован как комплект Python-модулей. Он включает в себя около 620 классов и 6000 функций и методов...

Скрипт отправки SMS через Python

Была задача отправить SMS-ки большому списку номеров телефона с уточнением цены за всю рассылку "До" ее отправки...

Работаем с ssh в Python

python ssh

В этой статье мы поговорим о paramiko – модуле, позволяющем работать с ssh в python. Он поможет создать скрипт, который сможет соединяться с удаленным сервером (или серверами) и выполнять на нем некоторые действия.

Довольно часто нам нужно выполнять много практически одинаковых действий на разных серверах. Работа по сути простейшая, вроде редактирования определенной строки в файле настроек или, например, замены файла «version_019» на «version_20». Если вам нужно это сделать на 1-2 серверах, то никаких проблем не возникнет, а вот когда серверов уже несколько десятков, наверняка вам быстро надоест. Конечно же можно просто нанять какого-нибудь новичка для этих целей, пусть работает, но такой вариант может не подойти.

Самые легкие задачи можно попробовать решить через стандартные средства ssh – скопировать файл или удаленно выполнить код. Можно еще попробовать утилиту empty.

Но, если вы знакомы с python, хотя бы на базовом уровне, то он поможет нам все сделать более продвинуто. Для этого есть модуль paramiko. Подходит он для python начиная с версии 2.3. Выполняет протокол ssh2, чтобы установить защищенное соединение (то есть будет шифрование и аутентификация) с удаленным сервером. В ходе создания подключения предоставляется высокоуровневое API, позволяющее работать с ssh – создается объект SSHClient. Чтобы получить больше контроля вы можете еще передать сокет (можно другой похожий объект) классу Transport, это позволить при работе быть клиентом или сервером. Чтобы аутентифицироваться как клиент потребуется пароль с личным ключом, а также проверка серверного ключа.

Вот маленький пример, как можно воспользоваться данным модулем. Ниже по небу будут комментарии.

 import paramiko 
 
host = '192.168.0.8'
user = 'login'
secret = 'password'
port = 22
 
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Подключение
client.connect(hostname=host, username=user, password=secret, port=port)
 
# Выполнение команды
stdin, stdout, stderr = client.exec_command('ls -l')
 
# Читаем результат
data = stdout.read() + stderr.read()
client.close()

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

SSHClient – это основной класс, который нам нужен чтобы подключаться и работать удаленно. Он дает нам «сессию» для дальнейшей работы.

В строке client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) вносим ключ сервера в перечень известных нам хостов - файл .ssh/known_hosts. Может случится, что во время установки соединения ключ не найдется, в этом случае он будет «отбит» и запустится SSHException.

Чтобы соединится с сервером нам понадобится client.connect(). Чтобы войти можно использовать как ключи, так и логины с паролями. Все параметры, такие как ключ, порт, логин, пароль, хост и прочие мы можем задавать при соединении.

В строчке client.exec_command('ls -l') указано, что нужно выполнить команду на удаленном сервере.

А если вам нужно готовое решение, чтобы быстро создать качественный сайт для бизнеса, заходите на Reg.ru. Здесь вы сможете получить сразу готовый сайт на популярной CMS Joomla для решения любых задач. Это может быть сайт визитка, интернет магазин или другой проект. Вы получите продуманный дизайн, широкие возможности по развитию, удобную систему управления и все остальное, что нужно для успешного ведения бизнеса.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru yandex.ru
Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)