Création d'un script pour une session Telnet?
Est-ce que quelqu'un connaît un moyen facile de créer un script qui peut se connecter à un serveur telnet, faire des choses habituelles telnet, puis se déconnecter? J'ai affaire à 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 double-cliquent sur un script et que ce script exécute automatiquement les commandes pour eux.
Vous vous demandez probablement, "sur quelle plate-forme sont les utilisateurs?"Ils seront à la fois sur Windows et Linux. Mises en œuvre dans les des langages comme Perl, Java ou Python sont acceptables. Je vois que Perl a un module Net:: Telnet. Quelqu'un a utilisé que?
Mon idéal serait de créer deux fichiers de script. un fichier BAT pour windows, et un script shell Pour Linux. Bien que cela rendrait la double maintenance un problème, 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 batch ou shell script.
Merci.
12 réponses
Expect est conçu pour cela et peut gérer l'entrée / sortie 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 L'entrée Wikipedia Expect est une ressource utile : -)
J'ai utilisé diverses méthodes pour scripter des sessions telnet sous unix, mais la plus simple est probablement une séquence de commandes echo et sleep, avec leur sortie canalisée dans telnet. La tuyauterie de sortie dans une autre commande est également une possibilité.
Exemple Stupide
(echo password; echo "show ip route"; sleep 1; echo "quit" ) | telnet myrouter
Ceci (basicallly) récupère la table de routage D'un routeur Cisco.
Une autre méthode consiste à utiliser netcat (ou nc, selon posix) dans le même format que Vatine ou vous pouvez créer un fichier texte contenant chaque commande sur sa propre ligne.
J'ai trouvé que certains telnets 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 peut ne pas sembler une bonne idée mais j'ai utilisé java et utilisé 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 implémenté. Pour SSH etc, il pourrait être difficile à moins que vous savez comment faire la poignée de main etc, mais simple telnet fonctionne comme un régal.
Une autre façon que j'ai essayé, utilisait un processus externe dans le système java.exec () etc, puis laissez les fenêtres intégrées dans telnet faire le travail pour vous et vous envoyez juste et recevoir des données au processus système local.
Recherchez l'outilsendcommand .
Vous pouvez l'utiliser comme suit:
perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
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")
Bash shell prend en charge ce out-of-box, 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 seulement quelques lignes, exécutez: grep Example <&${stream}
.
Quelques questions:
- Pouvez-vous mettre des choses sur l'appareil dans lequel vous téléinstallez?
- Les commandes exécutées par le script sont-elles les mêmes ou varient-elles selon la machine/l'utilisateur?
- Voulez-vous que la personne qui clique sur l'icône doive fournir un identifiant et / ou un mot de passe?
Cela dit, j'ai écrit un peu de Java il y a un moment pour parler à quelques bandes d'alimentation IP (BayTech RPC3s) qui pourraient vous être utiles. Si vous êtes intéressé je vais voir si je peux le déterrer et le poster quelque part.
J'aime l'exemple donné par Active State en utilisant python. Voici le lien complet . J'ai ajouté le simple journal de en partie le lien, mais vous pouvez obtenir l'essentiel de ce que vous pourriez 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()
Bien que n'étant pas directement lié à votre question, je vous recommande d'utiliser ssh à la place, car vous pouvez exécuter des commandes spécifiques via elle (en plus c'est plus sécurisé par défaut).
Écrivez la session telnet dans un fichier BAT Dos et exécutez.