Если вы используете в python модуль paramiko, наверняка вы сталкивались с ошибкой:
Как вы уже догадались, вывод print stdout.read() выведет результат команды ifconfig так, как-будто бы мы ее выполняли у себя на компьютере.
Используемые источники информации:
Python в системном администрировании Ноа Гифт, Джереми М. Джонс
Блог Заметки одного программиста
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() #закрываем соединение
#!/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 в системном администрировании Ноа Гифт, Джереми М. Джонс
Блог Заметки одного программиста
Комментариев нет:
Отправить комментарий