OVH Cloud OVH Cloud

Perl et SSH

20 réponses
Avatar
Sameline
Bonjour,

Actuellement j'ai un script perl qui manipule des fichiers via un
classique system ("XXX");

Je cherche a optimiser tous cela et j'aurais besoin de deux fonctions
(si elle existe) :

1- Que mon script compare deux fichiers textes et qu'il soit capable de
dire si le second est different du premier (plutot que de faire un move
j'aimerais etre sur qu'il y a une modification dans le fichiers avant de
le deplacer et relancer l'appli)

2- Le script doit executer des commande sur une machine distante via
SSH. pareil, actuellement je bidouille avec du system ("XX"), il y a une
solution plus propre ?

merci d'avance

10 réponses

1 2
Avatar
Chris
Paul Gaborit wrote:
À (at) Thu, 17 Nov 2005 13:33:17 +0100,
Chris écrivait (wrote):

Juste pour ma culture personnelle mais si les clés ont un mot de passe
existe t il un moyen pour se connecter vai ssh en lui passant la clé
ou au pire en la saisissant au prealable



Em la passant (la clé), cela signifie qu'elle n'est plus
protégée... donc non. En fournissant le mot de passe au préalable (à
un processus sécurisé), peut-être en passant par ssh-agent ou un
mécanisme similaire.


Salut,


Entre un clé avec passphrase vide ou il suffit de recupere le fichier
id.rsa ou autre et une clé saisie par utilisateur.

Non en fait cela vient que j'utilise SSH avec cle + passphrase mais cela
implique que cela devient difficile d'automatiser des transferts et/ou
des scripts avec cette technique sauf si l'on crée une clé avec
passphrase vide.

En fait pour automatiser qq chose avec CLE RSA et SSH si j'ai bien
compris il faut utilisateur distant dédié + cle sans passphrase.

J'avais espéré que perl permettait de transmettre la passphrase du style
<revons un peu>
$SSH->connect( $host, $user, $pass_phrase)
</revons un peu>
A+
chris


Avatar
Paul Gaborit
À (at) Thu, 17 Nov 2005 15:50:21 +0100,
Chris écrivait (wrote):
J'avais espéré que perl permettait de transmettre la passphrase du style
<revons un peu>
$SSH->connect( $host, $user, $pass_phrase)
</revons un peu>


À partir du moment où la "pass phrase" ou le mot de passe est stocké
en clair quelque part, on considère que ce n'est plus sécurisé... donc
que ça ne sert plus à rien.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Chris
Paul Gaborit wrote:
À (at) Thu, 17 Nov 2005 15:50:21 +0100,
Chris écrivait (wrote):

J'avais espéré que perl permettait de transmettre la passphrase du style
<revons un peu>
$SSH->connect( $host, $user, $pass_phrase)
</revons un peu>



À partir du moment où la "pass phrase" ou le mot de passe est stocké
en clair quelque part, on considère que ce n'est plus sécurisé... donc
que ça ne sert plus à rien.



Oui ok je critique pas le principe mais bon
comment faire pour la faire saisir a l'utilisateur lambda via une
interface graphique

A+
chris


Avatar
Nicolas George
Emmanuel Florac wrote in message
:
Facile : cmp ne renvoie rien si les fichiers sont identiques, donc "faux",
et quelque chose s'ils sont différents donc "vrai". Autrement dit il
vaut mieux utiliser `` ou qx() plutôt que 'system' (je te laisse chercher
pourquoi dans la doc...)


Beurk ! cmp, comme toutes les commandes Unix décentes, renvoit un code de
retour pour indiquer le résultat de son fonctionnement. C'est infiniment
préférable à la bidouille qui consiste à parser sa sortie, même
trivialement.

Avatar
Emmanuel Florac
Le Thu, 17 Nov 2005 17:29:53 +0000, Nicolas George a écrit :


Beurk ! cmp, comme toutes les commandes Unix décentes, renvoit un code de
retour pour indiquer le résultat de son fonctionnement. C'est infiniment
préférable à la bidouille qui consiste à parser sa sortie, même
trivialement.


à ma connaissance le code de retour indique le succès ou l'échec, mais
pas le résultat de la commande.

--
Sutor ne ultra Crepidam.

Avatar
Nicolas George
Emmanuel Florac wrote in message
:
à ma connaissance le code de retour indique le succès ou l'échec, mais
pas le résultat de la commande.


Dans toutes les commandes « interrogatives » (grep, test, diff, cmp...), le
code de retour est utilisé pour signaler le résultat du test, en plus d'un
éventuel affichage sur le terminal, et en réservant un code distinct pour un
échec anormal. Exemple pratique :

cigaes /tmp $ echo oui > oui1
cigaes /tmp $ echo oui > oui2
cigaes /tmp $ echo non > non
cigaes /tmp $ cmp oui1 oui2; echo $?
0
cigaes /tmp $ cmp oui1 non; echo $?
oui1 non differ: char 1, line 1
zsh: exit 1 cmp oui1 non
1
cigaes /tmp $ cmp oui1 maybe; echo $?
cmp: maybe: No such file or directory
zsh: exit 2 cmp oui1 maybe
2

Ce comportement est tout à fait standard, dans Single Unix par exemple (avec
0 pour le succès du test, 1 pour l'échec, et une valeur strictement
supérieure à 1 pour une erreur).

Souvent, des options sont fournies pour supprimer la sortie terminal et
n'avoir que le code de retour (-q pour GNU grep, -s pour cmp d'après Single
Unix).

Avatar
TiChou
Dans le message <news:,
*Emmanuel Florac* tapota sur f.c.l.perl :

1- Que mon script compare deux fichiers textes et qu'il soit capable de
dire si le second est different du premier (plutot que de faire un move
j'aimerais etre sur qu'il y a une modification dans le fichiers avant de
le deplacer et relancer l'appli)


Le plus simple ne serait-il pas de faire un system("cmp")?


D'expérience, j'aurais plutôt tendance à conseiller, pour faire de la
comparaison de fichiers, à utiliser un algorithme de signature numérique
comme MD5 avec md5sum qui sera beaucoup plus rapide que de la comparaison
octet par octet comme le fait 'cmp'.
Enfin ma remarque s'applique surtout dans le cas de fichiers relativement
gros.

--
TiChou


Avatar
Emmanuel Florac
Le Sun, 20 Nov 2005 17:07:58 +0100, TiChou a écrit :


D'expérience, j'aurais plutôt tendance à conseiller, pour faire de la
comparaison de fichiers, à utiliser un algorithme de signature numérique
comme MD5 avec md5sum qui sera beaucoup plus rapide que de la comparaison
octet par octet comme le fait 'cmp'.


Ce n'est plus rapide que si tu compares plusieurs fois un fichier avec
d'autres. Si tu compares des paires toujours différentes, cmp sera plus
rapide (il arrête dès qu'il trouve deux octets différents).

--
Ne pas savoir de quoi on parle est un avantage dont il ne faut pas
abuser.
R.Debray

Avatar
Nicolas George
Emmanuel Florac wrote in message
:
Ce n'est plus rapide que si tu compares plusieurs fois un fichier avec
d'autres. Si tu compares des paires toujours différentes, cmp sera plus
rapide (il arrête dès qu'il trouve deux octets différents).


Ça dépend : avec cmp, il faut lire les deux fichiers en même temps, ce qui
fait intervenir les temps d'accès du support de stockage s'ils sont gros et
sur le même support, et les problèmes de scheduling d'accès disque.

Avatar
Marko
Bonsoir,

Sameline wrote:
Bonjour,
1- Que mon script compare deux fichiers textes et qu'il soit capable de
dire si le second est different du premier (plutot que de faire un move
j'aimerais etre sur qu'il y a une modification dans le fichiers avant de
le deplacer et relancer l'appli)

J'utiliserais le module: File::Compare


Salutations

1 2