Como forneço um nome de usuário e senha para o wget?

157

Eu tentei conectar a um servidor via wget:

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

Mas o wget responde: porta inválida

Sei que o servidor aceita tráfego de entrada na porta 80. Como posso corrigir esse problema?

pschmidt
fonte
Eu não acho que você possa usar o usuário de forma confiável: sintaxe pass @ name; wgetpossui opções de linha de comando separadas para elas, portanto, provavelmente está analisando ingenuamente a sequência após o :número da porta.
Geekosaur

Respostas:

198

O Wget interpreta <pass>@serveraddresscomo porta. Para especificar um nome de usuário e senha, use as opções --usere --password:

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

De man wget:

--user=user

--password=password

Especifique o nome de usuário do usuário e senha senha para ambos FTP e recuperação de arquivos HTTP. Esses parâmetros podem ser substituídos usando as opções --ftp-usere --ftp-passwordpara conexões FTP e as opções --http-usere --http-passwordpara conexões HTTP.

Lekensteyn
fonte
48
Prefiro a --ask-passwordopção descrita pela resposta de Nabil Kadimi. Você digita a senha invisivelmente em outra linha e evita armazená-la no seu histórico de shell.
Kevin
8
@ Kevin Você pode evitar armazená-lo no histórico do shell iniciando a linha com pelo menos um espaço (como mostrado por Nabil ). Se a senha / recurso for sensível, você deve se preocupar mais com a conexão HTTP / FTP / criptografada / não criptografada do que com o armazenamento no disco.
Lekensteyn
Concordo que o problema da senha não criptografada seja mais importante em alguns casos do que o histórico do shell, mas a resposta também é útil para protocolos seguros. Além disso, às vezes você precisa se preocupar mais com espiões que têm acesso ao seu computador do que com espiões on-line (que não estão interessados ​​no conteúdo que você está acessando ou pelo qual não se importa). A resposta --ask-password abaixo é claramente melhor para uso interativo, enquanto a resposta --password aqui é mais fácil para automação. O comentário de Ixgr sobre .wgetrc e chmod também é interessante em alguns casos.
youen 17/07
Pelo que entendi o manual, o passe não é interpretado como porta. "Você também pode codificar seu nome de usuário e senha em um URL: http://user:password@host/path" "- manual
Tim
104

Você tem três opções e aqui não há nenhuma ordem específica além da sensação de coragem:

1 / Senha é visível para qualquer pessoa (usando o comando history)

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

A senha também estará visível em ps, top, htop e similares.

2 / Senha é visível para quem olha atrás dos seus ombros

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

Observe o espaço em branco antes do comando, pois evita salvá-lo no seu histórico.

A senha também estará visível em ps, top, htop e similares.

3 / A senha não está visível para ninguém, incluindo você

wget --user=remote_user --ask-password ftp://ftp.example.com/file.ext
Password for user `remote_user': [SECRET (not visible)]
Nabil Kadimi
fonte
6
Embora não seja visível no histórico, é visível para todos os que conduzem um comando ps, top, htop ou similar enquanto o processo está em execução.
4
@AbdennourTOUMI Por que você desabilitou as verificações de certificado, especialmente se estiver enviando uma senha com a solicitação? Definitivamente, isso não é aconselhável em geral. No que diz respeito a "ocultar" a senha nos logs ou / proc, a página de manual do wget oferece uma opção adicional: "Para impedir que as senhas sejam vistas, armazene-as em .wgetrc ou .netrc e certifique-se de proteger esses arquivos contra outros usuários com "chmod". "
Lxgr #
2
Se --ask-passwordnão está disponível ou você não deseja digitar a senha toda vez, wget -i link.txtpode ajudar, onde link.txtcontémftp://remote_user:[email protected]/file.ext
tehnicaorg
3

Você também pode armazenar o nome de usuário e a senha no arquivo ~/.wgetrc e alterar as permissões desse arquivo para que somente seu usuário possa lê-lo:

Arquivo ~/.wgetrc:

user=john
password=SEcrEt

... e depois

chmod 600 ~/.wgetrc

Observe, no entanto, que o usuário rootainda pode espiar o arquivo e ler a senha.

Na página de manual :

Para impedir que as senhas sejam vistas, use-as --use-askpassou armazene-as em .wgetrcou .netrce certifique-se de proteger esses arquivos de outros usuários "chmod". Se as senhas forem realmente importantes, também não as deixe nos arquivos --- edite os arquivos e exclua-os após o início do download do Wget.

PerlDuck
fonte
0

Você pode fornecer credencial de autenticação via --user=USERNAMEe --password=PASSWORD; baseado no man wget, o comando pode ser substituído usando o --http-user=USERNAMEe --http-password=PASSWORDpara http conexão eo --ftp-use=USERNAMEe --ftp-password=PASSWORDpara ftp conexão.

Esmaeil MIRZAEE
fonte
-1

O comando poderia ter usado --http-usere em --http-passwordvez de --usere --password. Em caso de ftpsolicitação, as opções são --ftp-usere --ftp-password.

Mradul
fonte
2
Isso não é inteiramente correto: man wgetindica que --user e --password são opções válidas, que podem ser substituídas por --http pelo usuário ou --ftp por senha
Charles Green