Han*_*ndy 4 command-line password fetchmail
我正在尝试配置 fetchmail。在处理 fetchmailrc 的语法之前(我发现问题的错误程度与我不理解的问题的不同方面的数量是协同的,所以一次一件新的事情),我决定通过所有通过命令行的选项。
我厌倦了为每个测试输入密码,所以我想在脚本中传递它。我找不到像 --pass 这样的东西作为 fetchmail 的命令行选项,所以我想也许可以将密码回显到 fetchmail ala:
echo "dohadeer"| fetchmail --all -p pop3 -k pop.gmail.com --ssl -d0 --user FakeName@gmail.com
Run Code Online (Sandbox Code Playgroud)
我忽略了它并用谷歌搜索“fetchmail 密码命令行”并得到了一些声称上述技术有效的点击!但是当我尝试它时,我收到错误:
fetchmail: can't find a password for FakeName@gmail.com@pop.gmail.com.
Run Code Online (Sandbox Code Playgroud)
我可以找出原始问题的解决方法,但我无法弄清楚为什么这种方法不起作用。显然,我对 Linux 有一些不明白的地方,想要弄清楚。
小智 5
给出错误消息的原因是 fetchmail 的标准输入未附加到终端,而是附加到管道。
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 {
...
Run Code Online (Sandbox Code Playgroud)
但是,您可以尝试以下script技巧来让其fetchmail在伪终端中运行。
(sleep 0.3; echo "dohadeer") |
( script -q /dev/null fetchmail --all -p pop3 -k pop.gmail.com --ssl -d0 --user FakeName@gmail.com )
Run Code Online (Sandbox Code Playgroud)