sudoでsshを使用し、出力をローカルファイルにリダイレクトする方法は?

sudoでsshを使用し、出力をローカルファイルにリダイレクトする方法は?

私が(bashで)したいことは次のとおりです。

for i in <host1> <host2> ... <hostN>; do ssh leroy@$i "sudo -i; grep Jan\ 15 /var/log/auth.log" > $i;done

そのホストのauth.logから今日のエントリを取得し、私のローカルファイルシステムに集約します。 auth.logはrootアクセスのみを許可するため、sudoが必要です。アカウントが無効になっているため、root ユーザーを使用できません。システムは2FA(キーとパスワード)を実装しているため、キーベースの認証を使用することはオプションではありません。

上記の操作を実行すると(初期認証後)、次の結果が表示されます。

sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper

-Sオプションと-Mオプションを含むさまざまな引数を試しましたが、何も機能しません。オンライン検索では、このステータスに関する内容は見つかりませんでした。

ベストアンサー1

さらなる研究では、いくつかの重要な注意事項があるsudo -Sオプションが明らかになりました。私が使用するものは次のとおりです。

for host in ...; do
    read -p "Password for $host sudo:" pswd; 
    ssh leroy@$host "echo $pswd | sudo -S grep ^Jan\ 15 /var/log/{auth.log,auth.log.1,syslog,syslog.1}" > $host;
done

指示:

プロンプトは混乱する可能性があるため、非常に明確な「読み取り」プロンプトが必要な理由です。リモートシステムのパスワードプロンプトに対する応答が必要です。パスワードを求めるsudoプロンプトがローカルシステムに表示されますが、応答はエコーとして表示されます。 sudoに渡されたコマンドがしばらく実行されると(syslogを追加しましたが、場合によってはgrepが数秒間処理される)、sudoが応答を待つように見えますが、実際にはコマンドが処理されています。

第二に、ローカルシステムにパスワードが浮かぶのにあまり良くないのですが、私のような場合は家にとってあまり問題はありません。

第三に、最終パスワードは環境に残るので、unset pswd後で追加する必要があります。

提案された改善点または代替案を高く評価します。

おすすめ記事