Форум сайта python.su
Помогите разобраться, что не так в примере.
Нашёл пример (http://www.minvolai.com/blog/2009/09/how-to-ssh-in-python-using-paramiko/) работы с транспортным объектом из paramiko:
import paramiko
hostname, port, username, password = ('host', 22, ‘user’, ‘pw’)
paramiko.util.log_to_file('trans.log')
nbytes = 100
trans = paramiko.Transport((hostname, int(port)))
trans.connect(username = username, password = password)
session = trans.open_channel('session')
#Once the channel is established, we can execute only one command. To execute another command, we need to create another channel
session.exec_command('sh run')
exit_status = session.recv_exit_status()
stdout_data =
stderr_data =
while session.recv_ready():
stdout_data.append(session.recv(nbytes))
stdout_data = “”.join(stdout_data)
while session.recv_stderr_ready():
stderr_data.append(session.recv_stderr(nbytes))
stderr_data = “”.join(stderr_data)
print (“exit status ”, exit_status)
print (“output”)
print (stdout_data)
print (“error”)
print (stderr_data)
При исполнении вылетает ошибка (не пойму чего ему не хватает):
Traceback (most recent call last):
File “D:\Install\Python\Project\ASAClient\ASAClient.py”, line 124, in <module>
session = trans.open_channel('session')
File “C:\Python32\lib\site-packages\paramiko\transport.py”, line 718, in open_channel
assert(isinstance(kind,bytes))
AssertionError
Офлайн
Надо пользоваться тегом code.
Офлайн
odnochlen
Надо пользоваться тегом code.
Офлайн
Вы копируете пример для второго питона и запускаете на третьем. Перед использованием библиотеки принято смотреть, поддерживает ли она вашу версию языка.
Офлайн
shadowonlineВ окне редактирования поста есть кнопочка.
в каком именно месте нужно его использовать?
Офлайн
odnochlenshadowonlineВ окне редактирования поста есть кнопочка.
в каком именно месте нужно его использовать?
Офлайн
fata1ex
Вы копируете пример для второго питона и запускаете на третьем. Перед использованием библиотеки принято смотреть, поддерживает ли она вашу версию языка.
import paramiko hostname, port, username, password = ('host', 22, 'user', 'pw') # setup logging paramiko.util.log_to_file('demo_ssh.log') ssh = paramiko.SSHClient() #ssh.load_system_host_keys() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname = hostname, port = port, username = username, password = password) #Авторизация stdin, stdout, stderr = ssh.exec_command(b"en") stdin.write(password) stdin.flush() stdin, stdout, stderr = ssh.exec_command(b"show run") print('out ', stdout.read().splitlines()) print('err ', stderr.read().splitlines()) stdin.write('show shun\n') stdin.flush() print('out ', stdout.read().splitlines()) print('err ', stderr.read().splitlines()) ssh.close()
Офлайн
В общем разобрался. Вот рабочий код.
import paramiko hostname, port, username, password = ('host', 22, 'user', 'pw') paramiko.util.log_to_file('trans.log') nbytes = 100 trans = paramiko.Transport((hostname, int(port))) trans.connect(username = username, password = password) session = trans.open_channel(b'session') #Once the channel is established, we can execute only one command. To execute another command, we need to create another channel session.exec_command(b'sh run') exit_status = session.recv_exit_status() stdout_data = [] stderr_data = [] while session.recv_ready(): stdout_data.append(session.recv(nbytes)) #stdout_data = b''.join(stdout_data) while session.recv_stderr_ready(): stderr_data.append(session.recv_stderr(nbytes)) #stderr_data = "".join(stderr_data) print ("exit status ", exit_status) print ("output") print (stdout_data) print ("error") print (stderr_data)
Офлайн
Вот только главной цели не достиг, после выполнения команды компонент отключается от сервера и в возвращаемых результатах нет строки приглашения ввода команды.
Может кто подскажет пример, как можно наладить общение с консолью через paramiko без разрыва соединения и обрезания приглашения (router> или router#) для ввода команд?
Офлайн