SSHキーを使用して他のサーバーのアカウントにアクセスできるユーザーがたくさんいます。現在、ssh公開鍵を収集し、それらを正しいサーバー上の正しいアカウントに配布するスクリプトがあります。
私がやりたいのは、公開鍵を受け入れて配布する前に、そのスクリプトを取得して、特定のユーザーのssh鍵にパスフレーズがあることを確認することです。
ssh-agent
やssh-add
を使用するなど、さまざまなことを試しましたが、ssh-add
がパスフレーズを要求されたときに問題が発生します。
openssl
のようなものを取得してパスフレーズをチェックする方法はありますか?キーにパスフレーズがある場合は、リターンコード1
でわずかに失敗しますか?
ありがとう!
キーファイルがパスフレーズを使用する場合、「Proc-Type:」属性が設定され、「ENCRYPTED」という単語が追加されます。
したがって、キーファイルがパスフレーズを使用しているかどうかは、find
およびgrep
を実行して、文字列「ENCRYPTED」があるかどうかを確認することで判断できます。
# list keyfiles that USE a passphrase
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -exec grep -q "ENCRYPTED" {} \; -print
haveパスフレーズのファイルのリストを出力します。次に、それらをすべてのキーファイルのリストと照合して、パスフレーズを使用しないものを選び出すことができます。すべてのキーファイルのリストを取得できます。次のように、-exec
パラメータを省略します。
# list all keyfiles
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print