четверг, 6 октября 2011 г.

Python /"модуль paramiko"/

Если вы используете в python модуль paramiko, наверняка вы сталкивались с ошибкой:

Traceback (most recent call last):
.....
  File "/usr/lib/pymodules/python2.7/paramiko/client.py", line 311, in connect
    self._policy.missing_host_key(self, server_hostkey_name, server_key)
  File "/usr/lib/pymodules/python2.7/paramiko/client.py", line 85, in missing_host_key
    raise SSHException('Unknown server %s' % hostname)
.....
Когда вы подключаетесь к серверу по SSH, он, перед запросом логина и пароля, предлагает вам принять ключ, чтобы, вы могли авторизоваться именно по ключу. Но так как по умолчанию SSHClient настроен так, чтобы не соединяться с сервером, если у клиента нет ключа, даже если логин и пароль правильны это приводит к тому, что SSHClient сбрасывает соединение и авторизоваться не получается. На такие случаи в Paramiko предусмотрено удобное решение:
....
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
....
это конструкция помогает принять параметры авторизации автоматически.
Например, давайте попробуем получить настройки сети UNIX системы:

#!/usr/bin/python python

import paramiko                                                          # импортируем модуль paramiko
hostname = 'localhost'                                                 # указываем имя или адрес сервера
port= 22                                                                      #указываем порт
username = 'username'                                                #имя пользователя
password = 'password'                                                # и пароль
if __name__ == "__main__":
        paramiko.util.log_to_file('param.log')                                       # ведем лог соединения
        s = paramiko.SSHClient()                                                         #создаем переменную
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())    # добавляем политику
        s.load_system_host_keys()                                                        #загружаем ключи
        s.connect(hostname, port, username, password)                        #передаем параметры
        stdin, stdout, stderr = s.exec_command('ifconfig')                     #запускаем команду
        print stdout.read()                                                                      #выводим результат
        s.close()                                                                                     #закрываем соединение

Как вы уже догадались, вывод print stdout.read() выведет результат команды ifconfig так, как-будто бы мы ее выполняли у себя на компьютере.

Используемые источники информации:
Python в системном администрировании Ноа Гифт, Джереми М. Джонс
Блог Заметки одного программиста

Комментариев нет:

Отправить комментарий