Por que não consigo ecoar a senha para o fetchmail?

3

Estou tentando configurar um fetchmail. Antes de eu lidar com a sintaxe do fetchmailrc (eu descobri que o nível de bugs de um problema é sinérgico com o número de diferentes aspectos do problema que eu não entendo, então uma coisa nova de cada vez), eu decidi passar por todos as opções via linha de comando.

Eu me cansei de digitar a senha para cada teste, então queria passar no script. Eu não consegui encontrar algo como --passar como uma opção de linha de comando para o fetchmail, então pensei em talvez fazer eco da senha para o fetchmail ala:

echo "dohadeer"| fetchmail  --all -p pop3 -k pop.gmail.com --ssl -d0   --user [email protected]

Eu o dispensei e pesquisei "fetchmail password commandline" e obtive vários hits que afirmavam que a técnica acima funcionava! Mas quando eu tentei, recebo o erro:

fetchmail: can't find a password for [email protected]@pop.gmail.com.

Eu posso descobrir soluções alternativas para o problema original, mas não consigo entender por que essa abordagem não funciona. Obviamente, há algo que não entendo sobre o Linux e quero descobrir.

    
por HandyGandy 11.11.2011 / 08:02

4 respostas

4

O motivo da mensagem de erro é que o fetchmail tem sua entrada padrão não anexada a um terminal, mas um pipe.

man fetchmail | less -Ip 'user authentication step failed'

# from: 
# http://opensource.apple.com/source/fetchmail/fetchmail-33/fetchmail/fetchmail.c

...
if (!isatty(0))   // <-- tests if stdin is a terminal (added)
{
   fprintf(stderr,
      GT_("fetchmail: can't find a password for %s@%s.\n"),
         ctl->remotename, ctl->server.pollname);
         return(PS_AUTHFAIL);
         } else {
...

Você pode, no entanto, tentar o seguinte script hack para permitir que fetchmail seja executado em um pseudo-terminal.

(sleep 0.3; echo "dohadeer") | 
( script -q /dev/null fetchmail --all -p pop3 -k pop.gmail.com --ssl -d0 --user [email protected] )
    
por 15.11.2011 / 17:36
3

Intencional. Qualquer coisa na linha de comando pode ser vista por qualquer outra pessoa no sistema, executando um simples comando ps , então a maioria dos softwares que usam uma senha não aceitarão a senha canalizada da linha de comando.

Existem alguns truques que você pode fazer com wish e expect , mas você está procurando por menos complexidade, não mais ...

    
por 11.11.2011 / 10:28
3

Você pode usar o arquivo .netrc para especificar senhas; Isso é explicado no manual link . Exemplo:

machine hermes.example.org
login joe
password topsecret
    
por 11.11.2011 / 10:41
1

Os recursos de segurança geralmente não são amigáveis ao usuário, e eu acho que existem algumas boas razões para isso. Basta usar as senhas como exemplo: você deve escolher uma senha difícil de adivinhar, mas isso geralmente significa que a senha também é difícil de lembrar.

A senha da sua conta de e-mail é a única coisa que impede outra pessoa de ler seus e-mails, portanto, faz sentido que o fetchmail tente impedir que você envie sua senha. Por outro lado, não é muito prático ter um programa programável como o fetchmail quando você precisa enviar sua senha toda vez que ele é executado. É por isso que o fetchmail permite colocar a senha em um arquivo de configuração (esse arquivo só deve ser lido por você mesmo; não tenho certeza se o fetchmail irá verificar isso, mas deveria).

O fato de você ser capaz de fornecer todo o fetchmailrc na linha de comando é basicamente um bug de segurança e provavelmente não foi planejado.

Você também pode vê-lo deste ponto de vista: Ao ler o arquivo fetchmailrc ou netrc, o fetchmail sabe de onde vêm os dados (do arquivo, ignorando o -f - hack / bug), para verificar se senha foi protegida (verificando se o arquivo é legível apenas pelo usuário). Se o ler do tty, ele não sabe de onde veio, então não pode verificar nada.

    
por 15.11.2011 / 08:23