Comment puis-je fournir un nom d'utilisateur et un mot de passe pour wget?

157

J'ai essayé de me connecter à un serveur via wget:

wget http://<user>:<pass>@serveradress

Mais wget répond: port invalide

Je sais que le serveur accepte le trafic entrant sur le port 80. Comment puis-je résoudre ce problème?

pschmidt
la source
Je ne pense pas que vous puissiez utiliser de manière fiable l'utilisateur: syntaxe pass @ name here; wgetA la place, les options de ligne de commande sont séparées pour celles-ci, aussi analyse-t-il probablement naïvement la chaîne après le :comme numéro de port.
geekosaur

Réponses:

198

Wget interprète <pass>@serveraddresscomme un port. Pour spécifier un nom d'utilisateur et un mot de passe, utilisez les commutateurs --useret --password:

wget --user user --password pass http://example.com/

De man wget:

--user=user

--password=password

Spécifiez le nom d' utilisateur utilisateur et le mot de passe mot de passe pour la récupération des fichiers FTP et HTTP. Ces paramètres peuvent être remplacés à l'aide des options --ftp-useret --ftp-passwordpour les connexions FTP et des options --http-useret --http-passwordpour les connexions HTTP.

Lekensteyn
la source
49
Je préfère l' --ask-passwordoption décrite dans la réponse de Nabil Kadimi. Il vous fait entrer le mot de passe de manière invisible sur une autre ligne et évite de le stocker dans l'historique de votre shell.
Kevin
8
@ Kevin Vous pouvez éviter de le stocker dans l'historique du shell en démarrant la ligne avec au moins un espace (comme le montre Nabil ). Si le mot de passe / la ressource est sensible, vous devriez vous préoccuper davantage de la connexion HTTP / FTP / non chiffrée / de toute connexion que de la stocker sur votre disque.
Lekensteyn
J'accepte le fait que le problème du mot de passe non chiffré est parfois plus important que l'historique du shell, mais la réponse est également utile pour les protocoles sécurisés. De plus, vous devez parfois vous soucier davantage des espions qui ont accès à votre ordinateur que des espions en ligne (qui ne sont pas intéressés par le contenu auquel vous accédez ou dont vous vous moquez). La réponse --ask-password ci-dessous est nettement meilleure pour une utilisation interactive, tandis que la réponse --password est plus facile à automatiser. Le commentaire de Ixgr sur .wgetrc et chmod est également intéressant dans certains cas.
Youen
Si j'ai bien compris le manuel, pass n'est pas interprété comme un port. "Vous pouvez également encoder votre nom d'utilisateur et votre mot de passe dans une URL: http://user:password@host/path" "- manuel
Tim
104

Vous avez 3 options et ici il n'y a pas d'ordre spécifique autre que le courage de sentir:

1 / Le mot de passe est visible par tout le monde (en utilisant la commande history)

wget --user=remote_user --password=SECRET ftp://ftp.example.com/file.ext

Le mot de passe sera également visible dans ps, top, htop et similaire.

2 / Le mot de passe est visible pour tous ceux qui cherchent derrière vos épaules

 wget --user=remote_user --password=SECRET ftp://ftp.example.com/file.ext

Remarquez l'espace blanc avant la commande, cela empêche de l'enregistrer dans votre historique.

Le mot de passe sera également visible dans ps, top, htop et similaire.

3 / Le mot de passe n'est visible par personne, y compris vous

wget --user=remote_user --ask-password ftp://ftp.example.com/file.ext
Password for user `remote_user': [SECRET (not visible)]
Nabil Kadimi
la source
6
Bien que cela ne soit pas visible dans l'historique, il est visible par tous ceux qui exécutent une commande ps, top, htop ou similaire pendant l'exécution du processus.
4
@AbdennourTOUMI Pourquoi désactivez-vous les vérifications de certificats, en particulier si vous envoyez un mot de passe avec la demande? Ce n'est certainement pas conseillé en général. En ce qui concerne le "masquage" du mot de passe dans les journaux ou dans / proc, la page de manuel wget offre une option supplémentaire: "Pour empêcher la visualisation des mots de passe, stockez-les dans .wgetrc ou .netrc et veillez à protéger ces fichiers de autres utilisateurs avec "chmod". "
Lxgr
2
Si --ask-passwordn'est pas disponible ou si vous ne voulez pas taper le mot de passe à chaque fois, wget -i link.txtpeut vous aider, où link.txtcontientftp://remote_user:[email protected]/file.ext
tehnicaorg
3

Vous pouvez également stocker le nom d'utilisateur et le mot de passe dans le fichier ~/.wgetrc et modifier les autorisations de ce fichier afin que seul votre utilisateur puisse le lire:

Fichier ~/.wgetrc:

user=john
password=SEcrEt

... puis

chmod 600 ~/.wgetrc

Notez cependant que cet utilisateur rootpeut toujours consulter ce fichier et lire le mot de passe.

De la page de manuel :

Pour empêcher la lecture des mots de passe, utilisez-les --use-askpassou stockez-les dans .wgetrcou .netrc, et veillez à protéger ces fichiers des autres utilisateurs "chmod". Si les mots de passe sont vraiment importants, ne les laissez pas non plus dans ces fichiers - éditez les fichiers et supprimez-les une fois que Wget a démarré le téléchargement.

PerlDuck
la source
0

Vous pouvez fournir des informations d'authentification via --user=USERNAMEet --password=PASSWORD; sur la base de man wget, la commande peut être remplacée à l'aide de --http-user=USERNAMEet --http-password=PASSWORDpour la connexion http et de --ftp-use=USERNAMEet --ftp-password=PASSWORDpour la connexion ftp .

Esmaeil MIRZAEE
la source
-1

La commande aurait pu utiliser --http-useret à la --http-passwordplace de --useret --password. En cas de ftpdemande, les options sont --ftp-useret --ftp-password.

Mradul
la source
2
Ce n'est pas tout à fait correct: man wgetindique que --user et --password sont des options valides, qui peuvent être remplacées par --http-user ou --ftp-password
Charles Green