Fetchmailを設定しようとしています。 fetchmailrcの構文を扱う前に(問題のバグのレベルは、私が理解していない問題のさまざまな側面の数と相乗効果があることを発見したので、一度に1つの新しいこと)、すべてを渡すことにしましたコマンドラインからのオプション。
各テストのパスワードを入力するのに飽きたので、スクリプトに合格したかったのです。 fetchmailのコマンドラインオプションとして--passのようなものが見つからなかったので、fetchmailalaにパスワードをエコーするのではないかと思いました。
echo "dohadeer"| fetchmail --all -p pop3 -k pop.gmail.com --ssl -d0 --user [email protected]
私はそれを却下し、「fetchmail password commandline」をグーグルで検索し、上記のテクニックが機能したと主張するいくつかのヒットを得ました!しかし、試してみるとエラーが発生します。
fetchmail: can't find a password for [email protected]@pop.gmail.com.
元の問題の回避策はわかりますが、このアプローチが機能しない理由はわかりません。明らかに、私がLinuxについて理解しておらず、理解したいことがあります。
与えられたエラーメッセージの理由は、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 {
...
ただし、次のscript
ハックを試して、疑似端末でfetchmail
を実行することはできます。
(sleep 0.3; echo "dohadeer") |
( script -q /dev/null fetchmail --all -p pop3 -k pop.gmail.com --ssl -d0 --user [email protected] )
意図的。単純なps
コマンドを実行することで、コマンドライン上のすべてのものをシステム上の他のユーザーが見ることができるため、パスワードを取得するほとんどのソフトウェアは、コマンドラインからパイプされたパスワードを受け入れません。
wish
とexpect
でできるトリックがいくつかありますが、探しているのは少ない複雑さであり、それ以上ではありません...
.netrc
ファイルを使用してパスワードを指定できます。これはマニュアルで説明されています http://www.fetchmail.info/fetchmail-man.html#14 。例:
machine hermes.example.org
login joe
password topsecret
多くの場合、セキュリティ機能はまったくユーザーフレンドリーではありません。それにはいくつかの理由があると思います。例としてパスワードを取り上げます。推測が難しいパスワードを選択することになっていますが、それは通常、パスワードも覚えにくいことを意味します。
あなたの電子メールアカウントのパスワードは、他の誰かがあなたの電子メールを読むのを妨げる唯一のものです。したがって、fetchmailがあなたがパスワードを平文で送信するのを阻止しようとするのは理にかなっています。一方、実行するたびにパスワードを送信する必要がある場合、fetchmailのようなスクリプト可能なプログラムを用意することはあまり実用的ではありません。これが、fetchmailがパスワードを設定ファイルに入れることを許可している理由です(このファイルは自分でしか読み取れないはずです。fetchmailがそれをチェックするかどうかはわかりませんが、チェックする必要があります)。
コマンドラインでfetchmailrc全体を提供できたことは、基本的にセキュリティバグであり、おそらく意図されていませんでした。
この観点からも確認できます。fetchmailrcまたはnetrcファイルを読み取るとき、fetchmailはデータの出所を認識しているため(ファイルから、-f -
ハック/バグを無視)、パスワードかどうかを確認できます。保護されています(ファイルがユーザーのみに読み取れることを確認することにより)。 ttyから読み取った場合、どこから来たのかわからないため、何もチェックできません。
私はこの質問が古くからあることを知っていますが、誰かが答えを探しに来たら、うまくいけばこれが役立つでしょう。これが私が仕事に取り掛かったものです:
echo "poll mailServer pass mailPassword" | fetchmail -f --- u mailUser
私は実際にこれをOPとOPが回答の1つに投稿したコメントからつなぎ合わせました。 OPが見逃していると思われる唯一のことは、構成を標準入力に送信するには、構成のルールに従う必要があるということでした。したがって、メールサーバーは設定の最初の項目である必要があり、パスワードの前には「pass」を付ける必要があります。他のすべては、標準入力で渡されるブロックまたは引数のいずれかに含めることができます。