これは何度も行われたと思いますが、明確な答えを見つけることができなかったので、より良い解決策についてあなたの専門知識に訴えています:
目的: 中程度のサイズの RHEL Hadoop クラスターをセットアップしており、すべてのノード間の SSH 接続の構成を自動化したいと考えています。最初のノードでは、ファイル 'remote_ips' にすべての IP のリストがあり、ファイル 'hduser_pw' (chmod 600) に hduser パスワードがあります。
ステップ 1) 各ホストで「hduser_pw」パスワード ファイルを作成する
for x in $(cat remote_ips); do sshpass -p$(cat hduser_pw) ssh -o StrictHostKeyChecking=no hduser@$x "echo $(cat hduser_pw) > hduser_pw; chmod 600 hduser_pw"; done
ステップ 2) クラスター内の各ノードの RSA キーを生成します。
for x in $(cat remote_ips); do sshpass -p$(cat hduser_pw) ssh -o StrictHostKeyChecking=no hduser@$x "echo -e 'y'| ssh-keygen -t rsa -N \"\"
"; done
ステップ 3) ファイル「remote_ips」をクラスター内の各ノードにコピーします。
for x in $(cat remote_ips); do sshpass -p$(cat hduser_pw) scp -o StrictHostKeyChecking=no remote_ips hduser@$x:~; done
ステップ 4) 各ノードについて、RSA 公開鍵を他のすべてのノードの「authorized_keys」にコピーします。
for x in $(cat remote_ips); do sshpass -p$(cat hduser_pw) ssh -o StrictHostKeyChecking=no hduser@$x 'for y in $(cat remote_ips); do cat /home/hduser/.ssh/id_rsa.pub | sshpass -p$(cat hduser_pw) ssh -o StrictHostKeyChecking=no hduser@$y '\''cat >> .ssh/authorized_keys'\'' ; done '; done
これを行うより良い方法はありますか?本当にありがとうございました。
編集:ここに私のリビジョンがあります:
@janos と @likewhoa からのフィードバックを取り入れました --> UUOC をリダイレクトで処理し、各 IP でループし、変数を使用してシェル履歴から pwd を削除しました。どうもありがとうございました!
hduser_pw=$(< hduser_pw)
remote_ips=$(< remote_ips)
for x in $remote_ips; do
echo "Create hduser_pw password file on node: ${x}"
sshpass -p$hduser_pw scp -o StrictHostKeyChecking=no hduser_pw hduser@$x:~
echo "chmod 600 hduser_pw on node: ${x}"
sshpass -p$hduser_pw ssh -o StrictHostKeyChecking=no hduser@$x "chmod 600 hduser_pw"
echo "Generate RSA keys for: ${x}"
sshpass -p$hduser_pw ssh -o StrictHostKeyChecking=no hduser@$x "echo y | ssh-keygen -f ~/.ssh/id_rsa -t rsa -N \"\""
echo "SCP the file remote_ips to node: ${x}"
sshpass -p$hduser_pw scp -o StrictHostKeyChecking=no remote_ips hduser@$x:~
done
for x in $remote_ips; do
for y in $remote_ips; do
echo "ssh-copy-id from node ${x} to node ${y}:"
sshpass -p$hduser_pw ssh -o StrictHostKeyChecking=no hduser@$x "sshpass -p${hduser_pw} ssh-copy-id -i ~/.ssh/id_rsa.pub hduser@${y} -o StrictHostKeyChecking=no";
done
done