Expect: le fameux ! ??

Résolu/Fermé
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 30 oct. 2012 à 17:46
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 31 oct. 2012 à 15:18
Bonsoir tout le monde !!!

alors oui j'ai lu pas mal de site et d'explication sur cette commande et non google n'est plus mon amis parce que je n'est pas trouvé ce que jy cherchais ! ^^

c'est pourquoi je fais appel à vous :)

donc voila le but: connexion ssh depuis une debian sur un win2k8r2 + ls -l(pour l'instant)
j'ai installer openssh par cygwin.

donc pour la conenxtion ssh aucun soucis, là où ca se corse c'est une fois connecté au windows, mon prompt c'est ca:

Administrateur@WIN-NUIR7G88F58 ~
$

et non pas le basic c:\path\bidule\truc

je suis donc coincé pour le expect suivant.

j'ai testé:

expect "Administrateur@WIN-NUIR7G88F58 ~\n $ " <== marche pas

expect "Administrateur@WIN-NUIR7G88F58 ~"
expect "$ " <== marche pas

expect "Administrateur@WIN-NUIR7G88F58 ~
$" <== marche pas (mais celui la je m'en doutais c'est juste heuu... vous savez les moments ou on se dit "aller pour rire de toute facon au point ou j'en suis, sait on jamais xD"

et biensur le plus logique

expect "$ " <== à l'aire d'etre mieux mais ne fonctionne pas plus pour autant...

donc je ne sais pas trop comment faire sachant que c'est ma première utilisation d'expect du coup je ne connais pas toute sa puissance...

quelqu un a déjà eu ce soucis?? ou tout simplement une idée :) ?

Merci d'avance ;) !!






A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
30 oct. 2012 à 17:57
Salut,

Expect

Essaies avec :
expect -gl "\\\[*]\$*"
ou bien :
expect -re ".*" 

0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
Modifié par LezardMoo le 30/10/2012 à 18:19
Merci :)

arf! ca ne focntionne pas, avec

expect -gl "\\\[*]\$*" ca me log mais ne me lance pas la commande ls (comme avec les autres commandes que j'ai testé.

et avec
expect -re ca ne me logue meme pas, il n'envoie pas le pass ssh, il me remet le chemin linux a la place

Admin@ip's password: path/linu/x
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
30 oct. 2012 à 18:11
En suivant le lien donné plus haut :
-gl 	May may be used to protect patterns that might otherwise match expect flags from doing so.
-re 	Introduce regulaar expression
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
30 oct. 2012 à 18:20
oui j'avais pas vu le lien que tu as posté ^^
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
30 oct. 2012 à 18:35
As-tu essayé "autoexpect." pour voir ce qu'il génère comme prompt ?
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
30 oct. 2012 à 18:36
ha ben... nan parce que je ne savais pas que ca existe ^^
je me renseigne ;)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
30 oct. 2012 à 18:40
Un tutoriel (en espagnol), qui m'a bien aidé au début : https://fr.scribd.com/document/49665951/Tutorial-de-Expect-V0-6

La page originale n'existe plus malheureusement ;-((
Je viens de retrouver celle-là maintenant en cherchant d'après le nom de l'auteur, ce n'est pas ce qu'on fait de mieux ;-(
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
31 oct. 2012 à 10:06
bon... autoexpect c'est pas mal, je vois que j'était presque bientot sur la bonne voie dans mon code ^^

par contre quand j'execute le script sortie par autoexpect, qui contient

la connexion ssh avec l'envois du mdp, un cd .., un autre et un dir et bien seule la connexion est réalisée, cd .. et ls ne sont pas executé...?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
31 oct. 2012 à 10:13
Euh... à vue de nez sans rien voir, difficile de te venir en aide ;-(

Par contre, à titre d'info, pour l'histoire du prompt, il t'a mis quoi autoexpect ?
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
Modifié par LezardMoo le 31/10/2012 à 10:40
voila le script sortie par autoexpect

#!/usr/bin/expect -f
#
to toggle this mode off and on.

set force_conservative 0  ;# set to 1 to force conservative mode even if
			  ;# script wasn't run conservatively originally
if {$force_conservative} {
	set send_slow {1 .1}
	proc send {ignore arg} {
		sleep .1
		exp_send -s -- $arg
	}
}



set timeout -1
spawn ssh Administrateur@IP
match_max 100000
expect -exact "Administrateur@IP's password: "
send -- "pass\r"
expect -exact "\r
Last login: Wed Oct 31 09:59:09 2012 from ox.fr\r\r
\"tty\" option detected in CYGWIN environment variable.\r
CYGWIN=tty is no longer supported.  Please remove it from your\r
CYGWIN environment variable and use a terminal emulator like mintty,\r
xterm, or rxvt.\r
 \[?1034h \]0;~\r\r
 \[32mAdministrateur@WIN-NUIR7G88F58  \[33m~ \[0m\r\r
\$ "
send -- "cd ..\r"
expect -exact "cd ..\r
 \]0;/home\r\r
 \[32mAdministrateur@WIN-NUIR7G88F58  \[33m/home \[0m\r\r
\$ "
send -- " \[A"
expect -exact "cd .."
send -- "\r"
expect -exact "\r
 \]0;/\r\r
 \[32mAdministrateur@WIN-NUIR7G88F58  \[33m/ \[0m\r\r
\$ "
send -- "ls\r"
expect -exact "ls\r
bin  cygdrive  Cygwin.bat  Cygwin.ico  Cygwin-Terminal.ico  dev  etc  home  lib  proc  tmp  usr  var\r
 \]0;/\r\r
 \[32mAdministrateur@WIN-NUIR7G88F58  \[33m/ \[0m\r\r
\$ "
send -- "exit\r"
expect eof
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
31 oct. 2012 à 14:39
bon... j'ai changé de technique ^^
j'ai coer un ptit script qui fait ce que je veux, je lexecute comme suit:

ssh user@host bash < script.sh

et ca me sort bien ce que je lui demande, le script est sur ma machine locale, aucun soucis mais evidemment je dois entrer le mdp a la mano.
maintenant si je me sers d'expect pour automatiser le mdp ca me logue bien mais alors là ce que je ne comprend pas c'est qu'il cherche a executer le script sur la machine distante... il me dit qu'il ne trouve pas le script etc...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
31 oct. 2012 à 14:47
ssh user@host 'bash -s' script.sh 



PS. Le fait que tu aies modifié ton précédent message au lieu d'en poster un nouveau, j'étais complètement passé à côté ;-((
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
31 oct. 2012 à 14:48
^^ j'avais testé comme ca aussi, ca n'est pas passé non plus
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
31 oct. 2012 à 14:42
hahaha EUREKA !!!

finaklement j'ai envoyé le script sur le serveur distant et tout fonctionne, c'est un peu tordu mais ca marche ;)

#!/bin/bash
#
#	rapatriement des sources medext
#

USER="user"
HOST="host"
PASS="pass\r"
EXP="password:"
FILE="/home/Administrateur/dlMedSrc"

expect -c "spawn ssh $USER@$HOST bash < findMedSrc.sh 
expect \"$EXP\"
send -- \"$PASS\"
expect \"$ \"
exit 0
"
echo "scp du fichier dmMedSrc"

expect -c "spawn scp $USER@$HOST:$FILE .
expect \"$EXP\"
send -- \"$PASS\"
expect \"$ \"
exit 0
"

echo "recup des fichiers dans le dossier RECUP"

while read line
do
expect -c "spawn scp $USER@$HOST:/home/Administrateur/$line RECUP
	   expect \"$EXP\"
	   send -- \"$PASS\"
	   expect \"$ \"
	   exit 0"
done < dlMedSrc


reste plus qu'à faire une fonction pour expect pour raccourcir tout ca !!

Merci de ton aide zipe31 ;)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
31 oct. 2012 à 15:05
De rien, mais en effet ce n'est pas très pratique ni conventionnel ;-\

Le plus simple n'aurait pas été de configurer une authentification via des clés ssh ?

Sinon, tu as aussi via les outils "putty-tools", l'utilitaire "plink" qui te permet de te loguer via ssh tout en fournissant le login et le password sur la ligne de commande...
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
Modifié par baladur13 le 31/10/2012 à 15:21
ca c'est sur c'est pas super conventionnel ni super propre... mais le prob c'est que jinterface du win avec du linux... deja pour find... j'ai du renomer la commande find.exe de windows sinon c'est a celle ci qu il se référait...

Biensure dans la foulé de test j'ai testé avec l'auth par clé mais je sais pas ca a pas marché... windows/linux peut etre... je sais pas

Personnellement je n'utilise windows que depuis que je suis au boulo sinon c'est linux a fond j'ai donc perdu pas mal de reflexes sous win, pour ce qui est de putty je ne l'utilise jamais... je préfère installer cygwin. c'est peut etre meme ca qui fait que j'ai autant galéré d'ailleurs xD

Parce qu'en fait je fais un truc assez horrible:
je ne peux pas faire sortir ma Debian de derrière la box du taff bbox --' (en perso j'ai free et aucun soucis mais la avec leur routeur de m***e impossible d'atteindre ma machine)
ducoup voila le mic mac xD

ya des sources sur une machine win7 distante. par un batch je les compresses et envoi en ftp sur un win2k8r2 distant aussi ensuite j'utilise le script que je viens de faire pour récupérer les sources... tu vois la galère xD

j'ai pas pu installé ssh sur le poste client distant si tu te demande pourquoi je rebondi sur le win2k8r2 donc c'est claire ya plus simple, beaucoup plus simple mais bon... a partir du moment ou ta du matos qui t'empèche de bosser correctement (bbox) faut trouvé d'autre solution.

encore Merci :D
0