@astar7922

Как в paramiko послать нажатие клавиши (DOWN, ENTER)?

Добрый день
есть такие замечательные АПКШ Континент-4, к которым можно подключиться по SSH но чтобы посмотреть таблицу arp например, надо в псевдографическом меню 3 раза нажать DOWN потом 2 раза ENTER, еще раз DOWN и т.д.
все это чтобы попасть в так называемую "командную строку"

в SupperPutty я написал просто SPSL script, который и посылает все эти DOWN и ENTER

хочу подключаться и получать arp таблицу из python
в netmiko даже BaseConnection видно что устанавливает соединение, но отваливается по таймауту в ожидание "приглашения" а его там нет

решил использовать paramiko

простой скриптик

import time
import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

KEY_DOWN = b'\x1b[B'
KEY_ENTER = b'\x0D'

device = {'username': 'user', 'password': 'password', 'hostname': 'myhost'}
cmd = 'neigh \r'.encode()
client.connect(**device)
ssh = client.invoke_shell()
ssh.send(KEY_DOWN)
time.sleep(2)
ssh.send(KEY_DOWN)
time.sleep(2)
ssh.send(KEY_DOWN)
time.sleep(2)
ssh.send(KEY_ENTER)
time.sleep(2)
ssh.send(KEY_ENTER)
time.sleep(2)
data = ssh.recv(99999).decode('utf-8')
print(data)


показывает (там конечно куча абракадабры) экран, на который можно попасть, просто нажав 2 раза ENTER

сделал после установления соединения:

ssh.send(KEY_ENTER)
time.sleep(2)
ssh.send(KEY_ENTER)
time.sleep(2)
data = ssh.recv(99999).decode('utf-8')
print(data)


да, действительно я попадаю на этот экран.
т.е. или байт код для стрелки DOWN я пишу неправильно, или что то еще

я обыскал весь интернет, предлагают escape последовательность '\eB[' но парамико надо передавать именно байт-код

или же paramiko свой метод .send(s) всегда закачивает '\r' или '\r\n' - как тогда этого избежать
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
@astar7922 Автор вопроса
Закрываю вопрос

я заметил, что на самом деле и в самом PuTTy мой spsl script срабатывает, только если выбран в Terminal/Keyboard/Function keys and keyboard Xterm R6

поперебирав варанты при вызове

ssh = client.invoke_shell(term = 'linux')

я нашел что все работатает вот при такой комбинации term = 'linux' по умолчанию видимо vt100
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 окт. 2024, в 12:50
10000 руб./за проект
06 окт. 2024, в 11:26
4000 руб./за проект
06 окт. 2024, в 08:42
20000 руб./за проект