[ expect ] upload SSH / SCP automatisé

upload SSH / SCP automatisé [ expect ] - Shell/Batch - Programmation

Marsh Posté le 07-01-2013 à 13:29:40    

Salut tout le monde  :hello:  
 
J'ai actuellement une routine située dans un shell script et qui me permet de faire un upload du profil, d'un utilisateur donné, sur plusieurs serveurs.
 
Cette routine est assez simple et fonctionne bien :)
 
Le souci est le suivant :
 

  • les serveurs gèrent l'authentification via VAS (un daemon qui assure le lien vers l'active directory)
  • il arrive que ce lien vers l'AD soit coupé, rendant l'authentification impossible
  • le comportement lors d'une tentative de connection est alors le suivant : on reçoit un password prompt indéfiniment


exemple :
 

Citation :


$> spawn scp -p -q -o StrictHostKeyChecking=no -o ConnectTimeout=7 .bash_profile .bashrc toto@server1:~/
Password:
Password:
Password:
Password:
...



 
A chaque fois, expect envoie le password mais retombe sur le même prompt.
 
Afin de traiter les cas où l'AD n'est pas joignable, je cherche la meilleure manière de mettre à jour le snipet expect.
 

Code :
  1. ...
  2. export exp_username='toto'
  3. export exp_pwd='*****'
  4. for line in ${hosts_table[@]}
  5. do
  6. export server_name=$(echo "$line" | awk '{print $2}');
  7. expect -c '
  8. eval spawn scp -p $env(ssh_flags) ".bash_profile .bashrc" $env(exp_username)@$env(server_name):~/
  9. match_max 1024000
  10. expect
  11. {
  12.  eof                               { send_error "\n ERROR : SSH failure\n"                       ; exit 1  }
  13.  -nocase "connection refused"      { send_error "\n ERROR : Connection refused by remote host\n" ; exit 1  }
  14.  -nocase "connection timed out"    { send_error "\n ERROR : Connection timed out\n"              ; exit 1  }
  15.  -nocase "closed by"               { send_error "\n ERROR : Connection closed by remote host\n"  ; exit 1  }
  16.  -nocase "no route"                { send_error "\n ERROR : No route to host\n"                  ; exit 1  }
  17.  -re ".*es.*o.*"                   { send "yes\r"                                                ; exp_continue }
  18.  -re ".*sword.*"                   { exp_send "$env(exp_pwd)\r"                                            }
  19.  -nocase "press enter to continue" { send "\r"                                                   ; exp_continue }
  20. }
  21. interact'
  22. done
  23. ...


 
 
Si quelqu'un a une idée je suis preneur  :jap:


Message édité par ANViL le 07-01-2013 à 13:40:46

---------------
Easy Ridin'  ⎝⏠⏝⏠⎠  
Reply

Marsh Posté le 07-01-2013 à 13:29:40   

Reply

Marsh Posté le 09-01-2013 à 16:31:56    

Personne ? :)
 
 
 
 
 
 


---------------
Easy Ridin'  ⎝⏠⏝⏠⎠  
Reply

Marsh Posté le 14-01-2013 à 19:12:40    

Incrémenter un compteur dans ton expect password peut-être, sortir si le compteur dépasse un seuil d'essais.

Reply

Marsh Posté le 15-01-2013 à 16:51:35    

Tuxerman12 a écrit :

Incrémenter un compteur dans ton expect password peut-être, sortir si le compteur dépasse un seuil d'essais.


 
Merci pour ta réponse  :)  
 
J'ai essayé d'implémenter un compteur, mais le problème qui se pose est le suivant :
 
 
-> j'envoie le password
-> j'incrémente une première fois le compteur
-> Je check le compteur : il ne dépasse pas encore la limite, je peux faire un second essai
 
 
Le souci c'est qu'avant de faire un 2eme essai, je dois essayer d'interagir avec la session, afin de vérifier que le premier envoi de m-d-p a fonctionné (ou pas).
 
C'est ce dernier point qui est assez compliqué  :sweat:


Message édité par ANViL le 15-01-2013 à 16:51:42

---------------
Easy Ridin'  ⎝⏠⏝⏠⎠  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed