Comment spécifier le nom d'utilisateur et le mot de passe dans la commande ftp?

9

Je veux automatiser un appel à ftp dans un script shell. Si je tape

$ftp somehost.domain.com

On me demande un nom d'utilisateur et un mot de passe. Je veux donner ce nom d'utilisateur et ce mot de passe dans le cadre de l'appel à ftp. La page de manuel de ftp indique que je peux émettre une commande utilisateur à l'invite ftp - mais je veux me connecter à ftp en une seule fois. Est-ce possible? Je ne vois rien dans les drapeaux pour ftp. Je vois que l'option -s me donne la possibilité de spécifier certaines commandes ftp une fois que j'ai l'invite ftp - mais je dois donner le nom d'utilisateur pour accéder à l'invite ...

bernie2436
la source
expect(une extension tcl / tk de toutes sortes) est un programme qui est idéal pour ce genre de choses - ie. attendez une invite; donner une réponse ... attendre une réponse; donnez une nouvelle réponse ... expectattendez "ogin:" et envoyez-vous votre nom d'utilisateur, puis attendez "assword:" et envoyez votre mot de passe.
Baard Kopperud

Réponses:

10

Utilisez un .netrcfichier dans votre répertoire personnel.

Le contenu est:

# machine <hostname> login <username> password <password>
machine ftp.example.com login myuser password $ecret

Si c'est quelque chose que vous faites par programme, écrivez le .netrcavant de vous connecter, supprimez-le lorsque vous avez terminé.

bahamat
la source
ce fichier est-il spécifique ftpou est-il lu par d'autres programmes également?
terdon
La netrc(5)page de manuel indique que c'est "pour ftp(1)" mais je ne suis pas sûr que ce ftpsoit la seule chose qui l'utilisera.
bahamat
Si vous voulez trouver votre fichier ".netrc" utilisez simplement cette commande:locate '.netrc'
goamn
1

Vous pouvez également écrire un script shell ac en utilisant un doc ici qui ressemblerait à ceci:

#!/bin/sh
HOST='someftpserver.com'
USER='username'
PASSWD='password'
FILES='*.txt'
#
ftp -nv $HOST>$FTPLOG <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd somedirectory
binary
mget $FILES
quit
END_SCRIPT
user81134
la source
0

Vous pouvez également envisager wputou wgetcomme alternatives, selon vos besoins.

Je ne l'ai pas utilisé wgetrécemment mais je l'ai utilisé wputparce que je ne voulais pas créer ou modifier des fichiers comme suggéré dans certaines réponses précédentes.

Pour wput, la syntaxe est:

wput <filename> ftp://<username>:<password>@<address>
Crumeniferus
la source