У меня есть приложение, в котором я настраиваю маршрутизаторы Cisco в лабораторной среде через консольный сервер.
Доступ к маршрутизаторам возможен через SSH. Иногда после выхода/сбоя программы соединение по ssh не разрывается.
После перезагрузки я не могу войти на этот конкретный маршрутизатор, пока порт на консольном сервере заблокирован.
Чтобы разблокировать его, мне нужно завершить сеанс ssh.
Если у меня есть несколько используемых сеансов, я не знаю, какие из них мне нужно завершить, поэтому я хотел бы получить исходный порт, когда соединение было создано paramiko/netmiko.
Делал ли кто-нибудь это раньше, или, может быть, у кого-то есть идея.
Чтобы получить базовый сокет соединения Paramiko SSH, используйте ssh.get_transport().sock
.
Затем см. Как распечатать локальный и удаленный адрес и порт подключенного сокета?
Итак, обычно это будет работать:
port = ssh.get_transport().sock.getsockname()[1]
Но это делает пару предположений. Поскольку вам не нужно использовать номер порта программно, безопаснее просто напечатать полный результат getsockname()
, а не предполагать, что результатом является кортеж с портом в индексе 1.
Спасибо, именно то, что я искал.