Connexion à 1 liste de routeurs via ssh (kornshell)

Signaler
Messages postés
1
Date d'inscription
mercredi 14 octobre 2020
Statut
Membre
Dernière intervention
14 octobre 2020
-
Messages postés
29325
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 octobre 2020
-
Bonjour,

N'étant pas un aficionados de script, je sollicite votre aide. J'ai régulièrement besoin pour mon travail de me connecter à une liste de routeurs, différente selon les jours, et de leur envoyer des commandes de vérification suite à des Travaux programmés par Orange.

J'ai récupéré un script déjà existant, mais qui fonctionnait en demandant l'IP du routeur à l'utilisateur du script, puis en lisait le résultat.

J'aimerais faire la même chose sans avoir à fournir l'IP du routeur à chaque fois, c'est-à-dire en utilisant une liste d'IPs listées dans un fichier texte, si possible sans retaper mon nom et mon mot de passe plusieurs fois. Il faut prendre en compte que je ne serais pas le seul utilisateur à utiliser ce script, et que les comptes et mot de passe sont différents selon les utilisateurs.

Pouvez-vous prendre un peu de votre temps pour m'aider s'il vous plaît?

Voici le script existant :

#!/bin/ksh

echo quel est votre login
read nom
echo "Bonjour $nom"
if [ "$nom" = "" ]
then
        echo "Precisez un nom d'utilisateur valide  !"
exit
fi
echo "preciser mot de passe"
read pass
if [ "$pass" = "" ]
#!/bin/ksh

echo quel est votre login
read nom
echo "Bonjour $nom"
if [ "$nom" = "" ]
then
        echo "Precisez un nom d'utilisateur valide  !"
exit
fi
echo "preciser mot de passe"
read pass
if [ "$pass" = "" ]
then
        echo "password non valide  !"
exit
fi         
 
echo "quel est l'IP du routeur X"
read X
echo "$X"
if [ "$X" = "" ]
then
        echo "Precisez une IP valide !" 
exit
fi
echo "quel est l'IP du routeur Y" 
read Y
if [ "$Y" = "" ]
then
        echo "Precisez une IP valide !"
exit
fi

echo "debut du script, merci de patienter..."

VAR=$(expect -c "
send_user \"=========================== debut routeur X =========================== \"
spawn ssh -l $nom@site.com -p 3007 $X
expect \"yes\" { 
        send \"yes \n\" }
        expect \"Password: \" {
                send \"$pass\r\"}
                expect \"#\"    
                send \"term len 0\n\"
                expect \"#\"
                send \"sh ip int brief\n\"
                expect \"#\"
                send \"sh ip bgp summary\n\"
                expect \"#\"
                send \"sh vrrp brief\n\"
                expect \"#\"
                send \"sh track\n\"
                expect \"#\"
                send \"sh policy-map interface brief\n\"
                expect \"#\"
                send \"exit\n\"
                expect \"#\"


send_user \"=========================== debut routeur Y =========================== \"
spawn ssh -l $nom@site.com -p 3007 $Y
expect \"yes\" { 
        send \"yes \n\" }
                expect \"Password: \" {
                send \"$pass\r\"}
                expect \"#\"    
                send \"term len 0\n\"
                expect \"#\"
                send \"show ip route static\n\"
                expect \"#\"
                send \"sh ip int brief\n\"
                expect \"#\"
                send \"sh ip bgp summary\n\"
                expect \"#\"
                send \"sh vrrp brief\n\"
                expect \"#\"
                send \"sh track\n\"
                expect \"#\"
                send \"sh policy-map interface brief\n\"
                expect \"#\"
                send \"exit\n\"
                expect \"#\"
                
                
")
echo "$VAR"
echo "$VAR" > result_rt
echo "pour revoir les resultats, faire more result_rt"


J'ai essayé de le modifier comme ci dessous mais j'ai cette erreur qui apparait :

line 2: syntax error at line 30: `(' unexpected


#!/bin/ksh
files="/script/MER/routeurs/liste-routeurs"
for $f in $files; do
echo quel est votre login
read nom
echo "Bonjour $nom"
if [ "$nom" = "" ]
then
        echo "Precisez un nom d'utilisateur valide  !"
exit
fi
echo "preciser mot de passe"
read pass
if [ "$pass" = "" ]
then
        echo "password non valide  !"
exit
fi

echo "$f"
read "$f"
if [ "$f" = "" ]
then
        echo "Precisez une IP valide !"
exit
fi

echo "debut du script, merci de patienter..."

VAR=$f(expect -c "
send_user \"=========================== debut routeur $f =========================== \"
spawn ssh -l $nom@site.com -p 3007 $x
expect \"yes\" { 
        send \"yes \n\" }
        expect \"Password: \" {
                send \"$pass\r\"}
                expect \"#\"    
                send \"term len 0\n\"
                send \"sh vrrp brief\n\"
                expect \"#\"
                send \"exit\n\"
                expect \"#\"

")
echo "$VAR"
echo "$VAR" > result_rt
echo "pour revoir les resultats, faire more result_rt"

2 réponses

Messages postés
35687
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
16 octobre 2020
5 543
Salut,

Un peu d'aide dans la FAQ de CCM : Comment lire un fichier ligne par ligne

Messages postés
29325
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 octobre 2020
6 943
Bonjour,

L'idéal serait d'utiliser :
  • parallel-ssh
    pour exécuter une commande arbitraire sur un ensemble de machine (selon un fichier qui liste les login@machine vers lesquels se connecter)
  • une clé ssh (une clé par utilisateur) pour t'affranchir des problématiques d'authentification (il faut que chaque utilisateur crée sa propre clé ssh avec
    ssh-keygen
    , l'upload sur les machines distances avec
    ssh-copy-id
    ; ceci fait, il suffira que l'utilisateur lance
    ssh-add
    pour activer une authentification ssh transparente


Concernant les commandes à lancer sur le script : l'idéal serait de mettre sur chaque machine script qui va lancer le diagnostic (e.g. les commandes
sh ip route static
) e.g. dans
/usr/local/bin/diagnostic.sh
qu'il suffira ensuite d'invoquer via
parallel-ssh
.

Si tu ne peux pas stocker de fichier sur la machine distante, tu devras rester sur le genre de script que tu as.

Bonne chance