スクリプトを使用した複数のリモート サーバーへのパスワードレス SSH ログインのセットアップ
SSH キーベースの認証 (公開キー認証とも呼ばれる) では、パスワードを使用しない認証が可能であり、パスワード認証よりも安全で優れたソリューションです。 SSH パスワードなしのログインの大きな利点の 1 つは、セキュリティは言うまでもなく、さまざまな種類のクロスサーバー プロセスの自動化が可能になることです。
この記事では、シェル スクリプトを使用して、SSH キー ペアを作成し、公開キーを複数のリモート Linux ホストに一度にコピーする方法を示します。
Linux で新しい SSH キーを作成する
まず、 >ssh-keygen コマンドは次のようになります。
ssh-keygen
複数のリモート ログイン用のシェル スクリプトを作成する
次に、公開キーを複数のリモート Linux ホストにコピーするのに役立つシェル スクリプトを作成します。
vim ~/.bin/ssh-copy.sh
次のコードをファイルにコピーして貼り付けます (次の変数を適宜置き換えてください) USER_NAME
– 接続するユーザー名 HOST_FILE
– ホスト名または IP アドレスのリストが含まれるファイル、および ERROR_FILE
– ssh コマンド エラーを保存するファイル)。
#!/bin/bash
USER_NAME="root"
HOST_FILE="/root/hosts"
ERROR_FILE="/tmp/ssh-copy_error.txt"
PUBLIC_KEY_FILE="$1"
if [ ! -f $PUBLIC_KEY_FILE ]; then
echo "File '$PUBLIC_KEY_FILE' not found!"
exit 1
fi
if [ ! -f $HOST_FILE ]; then
echo "File '$HOST_FILE' not found!"
exit 2
fi
for IP in `cat $HOST_FILE`; do
ssh-copy-id -i $PUBLIC_KEY_FILE $USER_NAME@$IP 2>$ERROR_FILE
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo ""
echo "Public key successfully copied to $IP"
echo ""
else
echo "$(cat $ERROR_FILE)"
echo
exit 3
fi
echo ""
done
ファイルを保存して閉じます。
次に、図に示すように、chmod コマンドを使用してスクリプトを実行可能にします。
chmod +x ssh-copy.sh
次に、ssh-copy.sh
スクリプトを実行し、スクリーンショットに示すように公開キー ファイルを最初の引数として指定します。
./ssh-copy.sh /root/.ssh/prod-rsa.pub
次に、ssh-agent
を使用してキーを管理します。これにより、復号化された秘密キーがメモリに保持され、ログインの認証に使用されます。 ssh-agent
を起動した後、次のように秘密キーをそれに追加します。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/prod_rsa
パスワードなしでリモート Linux サーバーにログインする
これで、SSH ユーザー認証のパスワードを入力しなくても、リモート ホストにログインできるようになります。このようにして、サーバー間のプロセスを自動化できます。
ssh [email
以上で終わりです!特にシェル スクリプトの改善に関して貢献できることがあれば、以下のフィードバック フォームからお知らせください。