¿Cómo proporciono un nombre de usuario y contraseña para wget?

157

Intenté conectarme a un servidor a través de wget:

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

Pero wget responde: puerto no válido

Sé que el servidor acepta el tráfico entrante en el puerto 80. ¿Cómo puedo solucionar este problema?

pschmidt
fuente
No creo que pueda usar de manera confiable al usuario: pase la sintaxis de nombre allí; wgettiene opciones de línea de comando separadas para ellos, por lo que probablemente esté analizando ingenuamente la cadena después del :número de puerto.
geekosaur

Respuestas:

198

Wget interpreta <pass>@serveraddresscomo puerto. Para especificar un nombre de usuario y contraseña, use los interruptores --usery --password:

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

De man wget:

--user=user

--password=password

Especifique el nombre de usuario y la contraseña para recuperar archivos FTP y HTTP. Estos parámetros se pueden anular utilizando las opciones --ftp-usery --ftp-passwordpara las conexiones FTP y las opciones --http-usery --http-passwordpara las conexiones HTTP.

Lekensteyn
fuente
49
Prefiero la --ask-passwordopción descrita por la respuesta de Nabil Kadimi. Te permite ingresar la contraseña de forma invisible en otra línea y evita almacenarla en tu historial de shell.
Kevin
8
@Kevin Puede evitar almacenarlo en el historial de shell iniciando la línea con al menos un espacio (como lo muestra Nabil ). Si la contraseña / recurso es confidencial, entonces debería preocuparse más por la conexión HTTP / FTP sin cifrar / cualquier conexión que almacenarla en su disco.
Lekensteyn
Estoy de acuerdo con que el problema de la contraseña no cifrada sea más importante en algunos casos que el historial de shell, pero la respuesta también es útil para protocolos seguros. Además, a veces DEBE preocuparse más por los espías que tienen acceso a su computadora que por los espías en línea (que no están interesados ​​en el contenido al que está accediendo o por el que no le importa). La respuesta --ask-password a continuación es claramente mejor para el uso interactivo, mientras que la respuesta --password aquí es más fácil para la automatización. El comentario de Ixgr sobre .wgetrc y chmod también es interesante en algunos casos.
youen
Según entiendo el manual, pass no se interpreta como puerto. "También puede codificar su nombre de usuario y contraseña dentro de una URL: http://user:password@host/path" "- manual
Tim
104

Tiene 3 opciones y aquí no hay un orden específico que no sea la agallas:

1 / La contraseña es visible para cualquiera (usando el comando history)

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

La contraseña también será visible en ps, top, htop y similares.

2 / La contraseña es visible para cualquiera que mire detrás de tus hombros

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

Observe el espacio en blanco antes del comando, evita guardarlo en su historial.

La contraseña también será visible en ps, top, htop y similares.

3 / La contraseña no está visible para nadie, incluido usted

wget --user=remote_user --ask-password ftp://ftp.example.com/file.ext
Password for user `remote_user': [SECRET (not visible)]
Nabil Kadimi
fuente
66
Si bien no es visible en el historial, es visible para todos los que realizan un comando ps, top, htop o similar mientras se ejecuta el proceso.
44
@AbdennourTOUMI ¿Por qué deshabilitaría las comprobaciones de certificados, especialmente si envía una contraseña con la solicitud? Eso definitivamente no es aconsejable en general. En cuanto a "ocultar" la contraseña en los registros o / proc, la página de manual de wget ofrece una opción adicional: "Para evitar que se vean las contraseñas, guárdelas en .wgetrc o .netrc, y asegúrese de proteger esos archivos de otros usuarios con "chmod". "
lxgr
2
Si --ask-passwordno está disponible o si no desea escribir la contraseña cada vez, wget -i link.txtpuede ayudar, donde link.txtcontieneftp://remote_user:[email protected]/file.ext
tehnicaorg
3

También puede almacenar el nombre de usuario y la contraseña en el archivo ~/.wgetrc y cambiar los permisos de ese archivo para que solo su usuario pueda leerlo:

Archivo ~/.wgetrc:

user=john
password=SEcrEt

... y entonces

chmod 600 ~/.wgetrc

Tenga en cuenta, sin embargo, que el usuario rootaún puede mirar ese archivo y leer la contraseña.

Desde la página del manual :

Para evitar que se vean las contraseñas, úselas --use-askpasso guárdelas en .wgetrco .netrc, y asegúrese de proteger esos archivos de otros usuarios con "chmod". Si las contraseñas son realmente importantes, tampoco las deje en esos archivos: edite los archivos y elimínelos después de que Wget haya comenzado la descarga.

PerlDuck
fuente
0

Puede proporcionar credenciales de autenticación a través de --user=USERNAMEy --password=PASSWORD; basado en man wget, el comando se puede anular utilizando --http-user=USERNAMEy --http-password=PASSWORDpara la conexión http y la --ftp-use=USERNAMEy --ftp-password=PASSWORDpara la conexión ftp .

Esmaeil MIRZAEE
fuente
-1

El comando podría haber usado --http-usery en --http-passwordlugar de --usery --password. En caso de ftpsolicitud, las opciones son --ftp-usery --ftp-password.

Mradul
fuente
2
Esto no es del todo correcto: man wgetindica que --user y --password son opciones válidas, que pueden ser anuladas por --http-user o --ftp-password
Charles Green