web-dev-qa-db-ja.com

sshキーのチェックにパスフレーズが含まれている

SSHキーを使用して他のサーバーのアカウントにアクセスできるユーザーがたくさんいます。現在、ssh公開鍵を収集し、それらを正しいサーバー上の正しいアカウントに配布するスクリプトがあります。

私がやりたいのは、公開鍵を受け入れて配布する前に、そのスクリプトを取得して、特定のユーザーのssh鍵にパスフレーズがあることを確認することです。

ssh-agentssh-addを使用するなど、さまざまなことを試しましたが、ssh-addがパスフレーズを要求されたときに問題が発生します。

opensslのようなものを取得してパスフレーズをチェックする方法はありますか?キーにパスフレーズがある場合は、リターンコード1でわずかに失敗しますか?

ありがとう!

8
Peter Farmer

キーファイルがパスフレーズを使用する場合、「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
11
Jawa