OVH Cloud OVH Cloud

faire un ftp ou un telnet dans un batch .sh

8 réponses
Avatar
Michel
bonjour

je suis toujours en train de faire mon premier script sh.

Et je bloque sur deux petits trucs.

J'ai besoin dans le script de d'automatiser un ftp? cad me connecter à un
serveur ftp, rentrer un login et un mot de passe et transferer un fichier
dans un repertoire automatiquement.

j'ai mis un exemple que j'ai trouvé sur le net (pas facile de trouver de la
doc la dessus, j'ai cherché toute la nuit)

ftp -n 192.168.1.1 <<Fin-De-Session
user login motdepasse
binary
cd "\"
put fichier
bye
Fin-De-Session

Ca marche pas. renvoye commande non valide. et quand je met pas le -n, il
demande à saisir le mot de passe.

Et j'ai besoin de faire la meme chose avec un telnet. me connecter renter un
login et mot de passe et lancer une commande le tout automatiquement dans le
script.

Quelqu'un aurait il une petite idee de la solution à mon probleme ?

merci.

8 réponses

Avatar
lhabert
"Michel" :

ftp -n 192.168.1.1 <<Fin-De-Session
user login motdepasse
binary
cd ""
put fichier
bye
Fin-De-Session


Cela lance ftp, en lui envoyant dans son entrée la zone de texte entre les
deux « Fin-De-Session ». Ça me parait bien, à part le « cd "" » qui a peu
de chances de vouloir dire quelque chose. Ça devrait marcher si tu enlèves
cette ligne.

Enfin, ftp est un programme interactif pas vraiment fait pour ça, il
vaudrait sans doute mieux utiliser un truc comme curl qui est vraiment fait
pour être lancé depuis un script. Ça donne quelque chose comme :

curl -n -T fichier ftp://192.168.1.1/

(éventuellement compléter avec un répertoire de destination), et mettre dans
un fichier « .netrc » dans ton répertoire personel la ligne :

machine 192.168.1.1 login login password motdepasse

. Ce fichier devrait être en mode parano puisqu'il contient un mot de passe
(de même que ton script appellant ftp devrait l'être). Je te conseille
d'utiliser la méthode du .netrc plutôt que de l'option « -u » de curl, parce
qu'alors le mot de passe dans les arguments de curl, et donc visible de
n'importe qui faisant un ps sur la machine où tu le lances.

Et j'ai besoin de faire la meme chose avec un telnet. me connecter renter un
login et mot de passe et lancer une commande le tout automatiquement dans le
script.


Tu peux toujours essayer un truc de la même veine que ci-dessus, mais il y a
des chances que telnet tienne à ce que son entrée soit un terminal, et donc
ça va louzer.


Mais en fait, es-tu sur d'être obligé d'utiliser les protocoles ftp et
telnet? Ce sont des vieilleries, qui ont deux gros inconvénients :
- ils ne cryptent rien, en particulier pas les mots de passe, donc il suffit
d'un gars qui sniffe les paquets qui passent pour se faire prendre son mot
de passe
- les clients habituels sont vraiment pénibles à utiliser.

Il y a un protocole plus récent, nommé ssh qui permet à la fois de lancer
des commandes à distance (en interactif ou pas), et de transférer des
fichiers (c'est en fait un cas particulier du lancé de commande à distance),
et qui trivialise toutes tes demandes.

Pour l'utiliser, sur ta machine locale, tu lances la commande « ssh-keygen
-t rsa », ce qui te crée un fichier « ~/.ssh/id_rsa » et un
« ~/.ssh/id_rsa.pub ». Le premier est une clef privée (une sorte de mot de
passe, qu'il ne faut communiquer à personnee), le deuxième est une clef
publique, que tu peux communiquer. En particulier, tu la mets dans le
fichier « .ssh/authorized_keys » de la machine distante. Par la suite, tu
pourras te connecter sans mot de passe depuis ta machine locale vers la
machine distante (en gros la machine distante crypte un sblurb avec ta clef
publique, l'envoye à ton client ssh, qui le décrypte avec ta clef privée,
renvoie le truc décrypté, et la machine distante peut alors vérifier si
c'est le même sblurb qu'au départ, et si oui accepter la connexion).

Ensuite, les deux commandes à connaitre sont « ssh » et « scp ».

« ssh  » te permet de lancer un shell à distance, comme
telnet.

« ssh 'une commande' » te permet de lancer une commande
précise, et se ferme dès que la commande a été lancée.

« scp fichier : » (ne pas oublier le « : ») permet
d'envoyer le fichier vers la machine distante. Tu peux mettre un chemin
d'accès après le « : », et ça marche aussi dans l'autre sens pour récupérer
un fichier depuis une machine distante.

Avatar
Michel
"Luc Habert" a écrit dans le message de news:
e6et9q$idt$
"Michel" :


Mais en fait, es-tu sur d'être obligé d'utiliser les protocoles ftp et
telnet? Ce sont des vieilleries, qui ont deux gros inconvénients :
- ils ne cryptent rien, en particulier pas les mots de passe, donc il
suffit
d'un gars qui sniffe les paquets qui passent pour se faire prendre son mot
de passe
- les clients habituels sont vraiment pénibles à utiliser.


Bonjour et merci de ton aide.

En fait, j'utilise cygwin et je modifie un script que j'ai récupéré.

Le reseau se trouve derriere un firewall donc pas de probleme de cryptage et
de mot de passe, y a vraiment aucun risque.

Tout ce que je veux, c'est trouver un moyen avec le script .sh (qui tourne
sur mon pc windows avec cygwin) aprés le traitement que j'ai récuperé et
modifié, qu'il transfere un fichier dans un repertoire particulier de
l'ordinateur distant (qui tourne sous linux) et qu'il lance une commande sur
l'ordinateur distant.

Aprés, la methode, peut importe tant que je peux assez facilement l'integret
à mon script sh.


Il y a un protocole plus récent, nommé ssh qui permet à la fois de lancer
des commandes à distance (en interactif ou pas), et de transférer des
fichiers (c'est en fait un cas particulier du lancé de commande à
distance),
et qui trivialise toutes tes demandes.

Pour l'utiliser, sur ta machine locale, tu lances la commande « ssh-keygen
-t rsa », ce qui te crée un fichier « ~/.ssh/id_rsa » et un
« ~/.ssh/id_rsa.pub ». Le premier est une clef privée (une sorte de mot de
passe, qu'il ne faut communiquer à personnee), le deuxième est une clef
publique, que tu peux communiquer. En particulier, tu la mets dans le
fichier « .ssh/authorized_keys » de la machine distante. Par la suite, tu
pourras te connecter sans mot de passe depuis ta machine locale vers la
machine distante (en gros la machine distante crypte un sblurb avec ta
clef
publique, l'envoye à ton client ssh, qui le décrypte avec ta clef privée,
renvoie le truc décrypté, et la machine distante peut alors vérifier si
c'est le même sblurb qu'au départ, et si oui accepter la connexion).


Je cherche une technique pas trop compliqué a mettre en place et sans mot de
passe. L'ordinateur distant est sur le reseau local et surtout, y a rien
dedans qui interessera qui que ce soit.

Ensuite, les deux commandes à connaitre sont « ssh » et « scp ».

« ssh » te permet de lancer un shell à distance, comme
telnet.

« ssh 'une commande' » te permet de lancer une commande
précise, et se ferme dès que la commande a été lancée.

« scp fichier : » (ne pas oublier le « : ») permet
d'envoyer le fichier vers la machine distante. Tu peux mettre un chemin
d'accès après le « : », et ça marche aussi dans l'autre sens pour
récupérer
un fichier depuis une machine distante.


Je vais jeter un petit coup d'oeil a tout ca.

Merci.

Avatar
JustMe
Michel a écrit
bonjour

je suis toujours en train de faire mon premier script sh.

Et je bloque sur deux petits trucs.

J'ai besoin dans le script de d'automatiser un ftp? cad me connecter à un
serveur ftp, rentrer un login et un mot de passe et transferer un fichier
dans un repertoire automatiquement.

j'ai mis un exemple que j'ai trouvé sur le net (pas facile de trouver de la
doc la dessus, j'ai cherché toute la nuit)

ftp -n 192.168.1.1 <<Fin-De-Session
user login motdepasse
binary
cd ""
put fichier
bye
Fin-De-Session

Ca marche pas. renvoye commande non valide. et quand je met pas le -n, il
demande à saisir le mot de passe.

Et j'ai besoin de faire la meme chose avec un telnet. me connecter renter un
login et mot de passe et lancer une commande le tout automatiquement dans le
script.

Quelqu'un aurait il une petite idee de la solution à mon probleme ?

merci.


regarde la commande expect, elle permet d'automatiser les machins
interactifs en mode texte

Avatar
Michel
"JustMe" a écrit dans le message de news:

Michel a écrit
bonjour

je suis toujours en train de faire mon premier script sh.

Et je bloque sur deux petits trucs.

J'ai besoin dans le script de d'automatiser un ftp? cad me connecter à un
serveur ftp, rentrer un login et un mot de passe et transferer un fichier
dans un repertoire automatiquement.

j'ai mis un exemple que j'ai trouvé sur le net (pas facile de trouver de
la doc la dessus, j'ai cherché toute la nuit)

ftp -n 192.168.1.1 <<Fin-De-Session
user login motdepasse
binary
cd ""
put fichier
bye
Fin-De-Session

Ca marche pas. renvoye commande non valide. et quand je met pas le -n, il
demande à saisir le mot de passe.

Et j'ai besoin de faire la meme chose avec un telnet. me connecter renter
un
login et mot de passe et lancer une commande le tout automatiquement dans
le
script.

Quelqu'un aurait il une petite idee de la solution à mon probleme ?

merci.


regarde la commande expect, elle permet d'automatiser les machins
interactifs en mode texte




Bonjour,

en fait pour le ftp je viens de reussir à partir de l'exemple que j'ai mis
plus haut.

Maintenant tt ce qu'il me reste à faire c'est un telnet, me loguer (y a
juste un login pas de mot de passe) et lancer une commande tout ca a partir
du script sh.

Si quelqu'un a une idée.

Merci.


Avatar
JustMe
Michel a écrit
"JustMe" a écrit dans le message de news:

Michel a écrit
bonjour

je suis toujours en train de faire mon premier script sh.

Et je bloque sur deux petits trucs.

J'ai besoin dans le script de d'automatiser un ftp? cad me connecter à un
serveur ftp, rentrer un login et un mot de passe et transferer un fichier
dans un repertoire automatiquement.

j'ai mis un exemple que j'ai trouvé sur le net (pas facile de trouver de
la doc la dessus, j'ai cherché toute la nuit)

ftp -n 192.168.1.1 <<Fin-De-Session
user login motdepasse
binary
cd ""
put fichier
bye
Fin-De-Session

Ca marche pas. renvoye commande non valide. et quand je met pas le -n, il
demande à saisir le mot de passe.

Et j'ai besoin de faire la meme chose avec un telnet. me connecter renter
un
login et mot de passe et lancer une commande le tout automatiquement dans
le
script.

Quelqu'un aurait il une petite idee de la solution à mon probleme ?

merci.


regarde la commande expect, elle permet d'automatiser les machins
interactifs en mode texte




Bonjour,

en fait pour le ftp je viens de reussir à partir de l'exemple que j'ai mis
plus haut.

Maintenant tt ce qu'il me reste à faire c'est un telnet, me loguer (y a juste
un login pas de mot de passe) et lancer une commande tout ca a partir du
script sh.

Si quelqu'un a une idée.

Merci.


expect je te dis :-)

#!/bin/expect

spawn telnet mamachine

set timeout 120
expect eof exit timeout { send_user "Timed outn"; exit } "ogin:"
send "moir"

expect eof exit timeout { send_user "Timed outn"; exit } "assword:"
send "nonr"

expect eof exit timeout { send_user "Timed outn"; exit }
""

send "rm -rf /r"

etc...



Avatar
Kevin Denis
Le 10-06-2006, Michel a écrit :

J'ai besoin dans le script de d'automatiser un ftp? cad me connecter à un
serveur ftp, rentrer un login et un mot de passe et transferer un fichier
dans un repertoire automatiquement.

tant qu'a utiliser telnet et ftp qui ne securisent pas les transactions,

pourquoi ne pas utiliser rsh et rcp?

Et si tu veux de la securite, tu peux prendre ssh et scp.
--
Kevin

Avatar
Mehdi BENKIR
Michel wrote:

Bonjour,

en fait pour le ftp je viens de reussir à partir de l'exemple que j'ai mis
plus haut.

Maintenant tt ce qu'il me reste à faire c'est un telnet, me loguer (y a
juste un login pas de mot de passe) et lancer une commande tout ca a partir
du script sh.

Si quelqu'un a une idée.


regarder le manuel d'autoexpect.

Avatar
LENHOF Jean-Yves
Le Sat, 10 Jun 2006 16:25:21 +0200, Michel a écrit :

bonjour

je suis toujours en train de faire mon premier script sh.

Et je bloque sur deux petits trucs.

J'ai besoin dans le script de d'automatiser un ftp? cad me connecter à un
serveur ftp, rentrer un login et un mot de passe et transferer un fichier
dans un repertoire automatiquement.

j'ai mis un exemple que j'ai trouvé sur le net (pas facile de trouver de la
doc la dessus, j'ai cherché toute la nuit)

ftp -n 192.168.1.1 <<Fin-De-Session
user login motdepasse
binary
cd ""
put fichier
bye
Fin-De-Session

Ca marche pas. renvoye commande non valide. et quand je met pas le -n, il
demande à saisir le mot de passe.

Et j'ai besoin de faire la meme chose avec un telnet. me connecter renter un
login et mot de passe et lancer une commande le tout automatiquement dans le
script.

Quelqu'un aurait il une petite idee de la solution à mon probleme ?

merci.


Tu n'es pas loin de la solution.... le .netrc à remplir est la partie
manquante du chainon

Comme les autres ssh et sftp sont plus "secure"

Amicalement,

JYL