SSH経由で他のサーバーでsudo NOPASSWDコマンドを実行する方法

SSH経由で他のサーバーでsudo NOPASSWDコマンドを実行する方法

この問題に関連する投稿はすべて読みました。ただし、私の投稿もご覧になり、ご提案いただければ幸いです。

パスワードなしの SSH を実行し、リモート サーバーでスクリプトを実行しようとしています。しかし、Sudo アクセスではパスワードが要求されます。提案してください。ローカル パスでは正常に実行されました。しかし、ルート アクセスを必要とするコマンドまたはスクリプトは失敗します。

以下はスクリプトです:

#!/bin/sh
#set -x
# This Script will search for mib files on Current Server and other Server
# to load mib on current Server.

if [ -f /home/shuksand/Script/MibSearch.conf ]
then
        . /home/shuksand/Script/MibSearch.conf
else
        echo "Failed to find config file. Hence Existing!!!!"
fi

# Check alll MIBS on Server


while read line
do
        ServerName=$line
        echo $line
        scp  /home/shuksand/Input/Mib.txt $ServerName:
        cat /home/shuksand/Input/Mib.txt | while read DATA
        do
                echo $DATA
                ssh -t -t shuksand@${ServerName} 'sudo su - root /bin/sh /home/shuksand/Mib.sh $DATA'
        done
done < /home/shuksand/Input/ServerList.txt

前もって感謝します!!

答え1

この問題は通常、sudoers ファイルによって発生します。試してみることの 1 つは、sh を実行するだけのスクリプトを作成し、その sh プロンプトから sudo コマンドを実行して、パスワードが必要かどうかを確認することです。

sudo は、同じログインから最近パスワードを認証したかどうかを記憶する傾向があることに注意してください。したがって、sudo が、一度十分に認証されたと判断 (パスワードを入力した可能性があります) し、その後 /etc/sudoers に変更を加えて、再度 sudo を実行しようとすると、sudo がプロンプトを表示しない可能性があり、簡単に誤解される可能性があります。これは、sudo が、5 分未満前にテストに合格したことを記憶している可能性があるためです。これは、/etc/sudoers の「タイムアウト」値によって設定されます (man sudoers)。

sudo su - root /bin/sh /home/shuksand/Mib.sh $DATA

おそらく、むしろ不必要に複雑になっているようです。sudo は機能するが su は失敗する、またはその逆のケースを時々見てきました。そのコマンドは両方が機能することを必要とします。多くのシステムでは、

sudo -i ~shuksand/Mib.sh $DATA

おそらく同じことをするでしょう。

答え2

必要なのは、/etc/sudoers ファイルを編集することだと思います。次のような内容を追加します。

<your username> ALL=(ALL) NOPASSWD: ALL

詳しい情報はこちらをご覧ください: https://askubuntu.com/questions/147241/execute-sudo-without-password

質問のフォーマットを修正することをお勧めしますか? あなたが書いた内容 (スクリプト) のほとんどは、質問とは実際には関係ありません。

編集: Mib.sh ファイルを正しく実行可能に設定し、ファイルの先頭に !#/bin/sh 行を含めている場合は、実行する必要があるのは 'sudo su - /home/shuksand/Mib.sh $DATA' だけです (su を実行すると、"root" が暗黙的/デフォルトになります)

関連情報