Est-ce que quelqu'un connaît un moyen facile de créer un script qui peut se connecter à un serveur telnet, effectuer des tâches habituelles telnet et se déconnecter? Je traite avec des utilisateurs qui ne sont pas familiers avec telnet et les commandes dont ils auront besoin pour exécuter. Tout ce que je veux, c'est qu'ils cliquent deux fois sur un script et le fassent exécuter automatiquement les commandes.
Vous vous demandez probablement: "Sur quelle plate-forme se trouvent les utilisateurs?" Ils seront sur Windows et Linux. Les implémentations dans des langages tels que Perl, Java ou Python sont acceptables. Je vois que Perl a un module Net :: Telnet. Quelqu'un at-il utilisé cela?
Ma solution idéale serait de créer deux fichiers de script. un fichier BAT pour Windows et un script Shell pour Linux. Cela rendrait la double maintenance problématique, mais cela signifierait que je n'aurais pas à installer Perl/Java/Python/etc ... sur chaque machine. Malheureusement, je n'ai vu aucun moyen d'automatiser une session telnet avec des fichiers de commandes ou des scripts Shell.
Merci.
Expect est construit pour cela et peut gérer les entrées/sorties ainsi que les délais d'attente, etc. Notez que si vous n'êtes pas un fan de TCL, il existe des modules Expect pour Perl/Python/Java.
EDIT: La page ci-dessus suggère que le Wikipedia Expect entry est une ressource utile :-)
J'ai utilisé diverses méthodes pour la création de scripts de sessions telnet sous Unix, mais la plus simple est probablement une séquence de commandes echo et sleep, leur sortie étant acheminée dans telnet. Transférer la sortie dans une autre commande est également une possibilité.
Exemple idiot
(mot de passe echo; echo "show ip route"; sommeil 1; echo "quitter") | telnet myrouter
Ceci (de manière générale) récupère la table de routage d'un routeur Cisco.
Une autre méthode consiste à utiliser netcat (ou nc, selon le posix) dans le même format que celui indiqué par vatine, ou vous pouvez créer un fichier texte contenant chaque commande sur sa propre ligne.
J'ai constaté que certains telnets de Posix ne gèrent pas la redirection correctement (c'est pourquoi je suggère netcat)
Ce script vbs recharge un commutateur Cisco, assurez-vous que telnet est installé sur Windows.
Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "telnet"
WScript.Sleep 1000
oShell.Sendkeys "open 172.25.15.9~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "en~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "reload~"
WScript.Sleep 1000
oShell.Sendkeys "~"
Wscript.Quit
Cela ne semble peut-être pas une bonne idée, mais j’ai utilisé Java et une simple programmation de socket TCP/IP pour me connecter à un serveur telnet et échanger des communications. Et cela fonctionne parfaitement si vous connaissez le protocole mis en œuvre. Pour SSH, etc., cela peut être difficile, à moins que vous ne sachiez comment établir une poignée de main, etc., mais le simple telnet fonctionne comme une gâterie.
Une autre façon que j’ai essayée consistait à utiliser un processus externe dans Java System.exec (), etc., puis à laisser les fenêtres intégrées à Telnet faire le travail à votre place. Vous venez d’envoyer et de recevoir des données au processus système local.
import telnetlib
user = "admin"
password = "\r"
def connect(A):
tnA = telnetlib.Telnet(A)
tnA.read_until('username: ', 3)
tnA.write(user + '\n')
tnA.read_until('password: ', 3)
tnA.write(password + '\n')
return tnA
def quit_telnet(tn)
tn.write("bye\n")
tn.write("quit\n")
Recherchez l'outil SendCommand .
Vous pouvez l'utiliser comme suit:
Perl sendcommand.pl -i login.txt -t Cisco -c "show ip route"
Bash Shell prend en charge cette solution prête à l'emploi, par exemple.
exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}
Pour filtrer et afficher uniquement certaines lignes, exécutez: grep Example <&${stream}
.
J'aime l'exemple donné par Active State en utilisant python. Voici le lien complet link . J'ai ajouté le journal simple en partie à partir du lien, mais vous pouvez obtenir le résumé de ce que vous pouvez faire.
import telnetlib
prdLogBox='142.178.1.3'
uid = 'uid'
pwd = 'yourpassword'
tn = telnetlib.Telnet(prdLogBox)
tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password:")
tn.write(pwd + "\n")
tn.write("exit\n")
tn.close()
Couple de questions:
Cela dit, il ya quelque temps, j’ai écrit à Java pour parler à quelques barrettes d’alimentation compatibles IP (BayTech RPC3) qui pourraient vous être utiles. Si cela vous intéresse, je verrai si je peux le creuser et le poster quelque part.