ウェブサイト検索

スクリプトを使用した複数のリモート サーバーへのパスワードレス 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 

以上で終わりです!特にシェル スクリプトの改善に関して貢献できることがあれば、以下のフィードバック フォームからお知らせください。