サーバーがどのSSHキーを受け入れるかを確認してください。

サーバーがどのSSHキーを受け入れるかを確認してください。

SSH秘密鍵でいっぱいのディレクトリがあり、どのサーバーがログインせずにどの鍵を受け入れるかを確認したいと思います。 ssh-addを使用して認証クライアントにsshキーを追加したり、サーバーにログインせずにこれを行うにはどうすればよいですか? SSHは認証にどのキーを使用すべきかをどのように知ることができますか?サーバーが使用できるキーのフィンガープリントを送信しますか、クライアントがすべてのフィンガープリントを送信し、サーバーがそれを確認しますか?

ベストアンサー1

次のようなものを使用できます。

#!/bin/bash

KEYPATH=~/.ssh/*
HOSTS=( localhost hosta hostb )

probekey ()
{
    for privkey in $KEYPATH
    do
    if [[ "$(file $privkey)" =~ "private" ]]
    then
        #echo "Probing key $privkey for host $1"
            ssh -i "${privkey}" -o "IdentitiesOnly yes" -o "PreferredAuthentications publickey" -o "ControlMaster no" "$1" exit 2>/dev/null
            if [ "$?" == "0" ]
            then
            echo "Key ${privkey} matches for host $1"
        fi
    fi
    done
}

for HOST in ${HOSTS[@]}
do
    probekey $HOST
done

このスクリプトの主な目的は、ホスト配列()を繰り返して$HOSTSそのprobekey機能を実行することです。この関数はファイルのリストを繰り返して、$KEYPATHファイル形式に個人(RSAまたはDSA秘密鍵ファイルの場合)が含まれていることを確認し、一致する場合はそのssh特定の鍵を使用してホストへの接続を開始します。接続が成功すると、戻りコードは 0 でメッセージが出力されます。

これは質問に対する正確な答えではないためするホストにログインし(キーが一致する場合)、コマンドをexit実行して直接ログアウトします。

おすすめ記事