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
実行して直接ログアウトします。