約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