スクリプトを介してsudoユーザーを使用して複数のサーバーでローカルスクリプトを実行する

スクリプトを介してsudoユーザーを使用して複数のサーバーでローカルスクリプトを実行する

約100のリモートサーバーがあります。ターミナルサーバーを使用してすべてのサーバーを管理し、sudo権限でコマンドを更新して実行したいと思います。

他のテストスクリプトをパラメータとして使用する基本スクリプトが必要です。デフォルトスクリプトは、リモートサーバー名を含むホストファイルを使用してwithループを介して実行されます。

テストスクリプトには、リモートサーバーですぐに実行される実際のsudoコマンドがすべて含まれています。

./mainscript hostfile testscript たとえば、テストスクリプトには、「sudo yum -y update」または一連のコマンドがあります。

rootとしてログインした場合、これは簡単です。しかし、すべてのリモートサーバーに対してsudo権限を持つユーザー「admin」として実行したいと思います。これらのスクリプトはすべてローカル端末サーバーにあります。

これを達成するために必要なアイデアを提案してください。

答え1

1つのアイデア(おそらく最善ではないかもしれません)は、パスワード認証ではなくキーベース認証を使用するようにsshを設定することです。わからない場合は、この説明で十分だろうと思います。SSH鍵認証

あなたのテストスクリプトに何が含まれているのか、その複雑さが何なのかわかりません。私たちを見てみましょう考えるこれは/tmp/script_output/の下に出力を格納するかなり複雑なスクリプトです。この場合、以下を提案します。

while read -r i
do
   scp $2 admin@remote_server:/tmp/
   ssh -t admin@remote_server /tmp/$2
   ssh admin@remote_server rm /tmp/$2
   scp -r admin@remote_server:/tmp/script_output/ /tmp/
   ssh admin@remote_server rm -rf /tmp/script_output
done < "$1"

ところで、sudoersで

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

答え2

私もしばらく前に同じ問題に直面しました。これが私の解決策です。
https://github.com/maciejkorzen/misc-ruby/blob/master/ssh-batch-upload-sftp-and-run.rb

  • このスクリプトをダウンロードしてください。
  • サーバー名とパスワードを含むCSVファイルを作成します(ログインは各サーバーで同じであると仮定します)。
  • 実行するスクリプトを作成します。
  • 私のRubyスクリプトで変数を調整して実行すると、すべての操作が自動的に実行されます。 :-)

答え3

sudo以下を使用すると、最初にパスワードを一度だけ入力しながら複数のホストでコマンドを実行できます。sudo

欠落しているのは、forループまたはHOSTS変数を持つホストに設定することです。スクリプトはtempパスワードを含むフォルダにファイルを生成しますsudoが、そのファイルはすぐに削除されます。これにより、コマンドはsudo端末ウィンドウまたはスクリプトにパスワードを表示せずにパスワードを使用できます。

#!/bin/bash

if "something" 
 then

 else

cat > /tmp/$HOSTS-pw.sh <<EOS
#!/bin/sh
ssh user@$HOSTS sudo "your command here" <<EOC
$SUDOPW
EOC
EOS

fi

chmod 700 /tmp/$HOSTS-pw.sh
/tmp/$HOSTS-pw.sh >/dev/null
if [ -f /tmp/$HOSTS-pw.sh ]; then rm -f /tmp/$HOSTS-pw.sh; fi

echo "Enter SUDO password:"
read -s SUDOPW

for loop here!

unset SUDOPW
exit 0

答え4

この状況には2つのスクリプトがあります。このスクリプトは、runonnodes選択したサーバー(サーバーリスト)ですべてのSSH操作を実行します。別の名前は、runonnodes_commands各サーバーで利用可能なネットワーク共有にあります。これは、選択した各サーバーで実行されるスクリプトです。

最初のスクリプトにはrunonnodes主に次のものが含まれます。

#!/bin/bash

SELECTEDNODES="node1 node2 node2"

for NODE in $SELECTEDNODES; do
    ssh -t $NODE "sudo su -c /mnt/share/runonnodes_commands"

これを行うには、キーベースの認証(私の公開鍵~/.ssh/authorized_keys)を使用します。sudo su

このスクリプトには、runonnodes_commandsファイルのコピー、パッケージのインストールなど、ノードで実行する必要があるすべての操作が含まれています。

#!/bin/bash

yum install python

関連情報