2 votes

Python - se connecter à un périphérique réseau via le terminal en utilisant le mot de passe

Mon objectif est de me connecter à un périphérique réseau via un serveur proxy/terminal. Lorsque je me connecte à l'aide de Putty, j'entre :

Nom d'utilisateur :ttyS 1 @ nom du terminal

Nom d'utilisateur est le nom de l'utilisateur, le numéro après :ttyS est le numéro de port auquel nous voulons nous connecter, et nom du terminal est le nom du serveur proxy. J'ai essayé le code que j'ai obtenu à partir de ces deux liens Lien1 y Lien2

from netmiko import ConnectHandler
import time
from netmiko import redispatch

jumpserver = {'device_type': 'terminal_server','ip': 'x.x.x.x','username': 'name','password': 'pass','global_delay_factor':5}

net_connect = ConnectHandler(**jumpserver)
print net_connect.find_prompt()

net_connect.write_channel('command to access router')
time.sleep(1)
net_connect.read_channel()

redispatch(net_connect, device_type='arista_eos')
net_connect.send_command('show hostname')

Lorsque j'exécute le script, il est déjà sur le serveur de terminal et ne peut plus se connecter au périphérique réseau.

Quelqu'un peut-il me suggérer comment se connecter à un périphérique réseau via un serveur proxy/terminal comme le fait PUTTY et obtenir le nom d'hôte du périphérique.

Added sample screen shot of Putty, which I want simulate using Python

J'ai reçu le code ci-dessous de l'un de mes collègues. Je peux maintenant accéder à l'appareil connecté sur un port particulier mais je ne parviens pas à me connecter. Lorsque j'entre le nom d'utilisateur à l'invite de connexion, il me demande l'ancien mot de passe, puis à nouveau le mot de passe. Je ne comprends pas pourquoi cela se produit car je peux me connecter en utilisant le même compte et le même mot de passe avec succès en utilisant Putty. Ce n'est qu'avec le script Python script qu'il demande l'ancien mot de passe, puis le mot de passe indéfiniment. Voici le code :

import time
from netmiko import ConnectHandler, redispatch

zpe_username = "serviceaccount"
zpe_password = "xxxxxxx"
zpe_hostname = "TerminalServerName"
console_username = zpe_username + ":ttyS" + "1"
console_server = {
    "host": zpe_hostname,
    "username": console_username,
    "password": zpe_password,
    "device_type": "terminal_server",
}
print("ssh " + console_username + "@" + zpe_hostname)

net_connect = ConnectHandler(**console_server)
net_connect.write_channel(zpe_username + "\n")
time.sleep(1)
password_prompt = net_connect.read_channel()
net_connect.write_channel(zpe_password + "\n")
time.sleep(1)

redispatch(net_connect, device_type='arista_eos')
device_type = net_connect.device_type
device_prompt = net_connect.base_prompt
print(device_type, device_prompt)

2voto

Avez-vous essayé le Paramiko bibliothèque ? Je vois qu'elle prend en charge le proxy HTTP. Je l'ai utilisé il y a quelque temps alors que j'étais derrière un proxy d'entreprise.

Le présent c'est ce que j'ai suivi.

2voto

Zdravko Georgiev Points 111

La chose suivante a fonctionné pour moi après adding net_connect.enable() :

import time
from netmiko import ConnectHandler, redispatch

zpe_username = "serviceaccount"
zpe_password = "xxxxxxx"
zpe_hostname = "TerminalServerName"
console_username = zpe_username + ":ttyS" + "1"
console_server = {
    "host": zpe_hostname,
    "username": console_username,
    "password": zpe_password,
    "device_type": "terminal_server",
}
print("ssh " + console_username + "@" + zpe_hostname)

net_connect = ConnectHandler(**console_server)
net_connect.enable()
net_connect.write_channel(zpe_username + "\n")
time.sleep(1)
password_prompt = net_connect.read_channel()
net_connect.write_channel(zpe_password + "\n")
time.sleep(1)

redispatch(net_connect, device_type='arista_eos')
device_type = net_connect.device_type
device_prompt = net_connect.base_prompt
print(device_type, device_prompt)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X