私が(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
後で追加する必要があります。
提案された改善点または代替案を高く評価します。