RSAキーペアのプライベート部分にアクセスできるとしましょう。このキーにパスフレーズが関連付けられているかどうかを確認するにはどうすればよいですか?
キーファイルは、パスワードで保護されている場合、別のヘッダーになります。パスフレーズのない鍵の上部は次のとおりです。
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA3qKD/4PAc6PMb1yCckTduFl5fA1OpURLR5Z+T4xY1JQt3eTM
そして、これがパスフレーズで保護された鍵の上部です:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,556C1115CDA822F5
AHi/3++6PEIBv4kfpM57McyoSAAaT2ECxNOA5DRKxJQ9pr2D3aUeMBaBfWGrxd/Q
残念ながら、それはファイルを見てのみ機能します。私は、サーバーに提示されているキーがパスフレーズで保護されているかどうかをサーバーが判断する方法がないことを知っています。パスフレーズは、そのような情報を活用できる最も便利な場所です。
他の回答で説明されているように、必ずしも簡単ではありません。古いPEMキーでのみ機能します。ヘッダーを確認すると、キーの新しいopenssh
形式(-o
オプションで生成され、openssh-6.5以降でより安全)は同じように見えます。
$ head rsa_enc
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABCYdi7MhY
$ head rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
この場合の最も簡単な方法は、ssh-keygen
を使用して操作を実行することです。パスフレーズを要求する場合、パスフレーズはありません( またはsshキーではない )。パスフレーズがない場合:
$ ssh-keygen -yf rsa_enc
Enter passphrase:
$ ssh-keygen -yf rsa
ssh-rsa AAAAB3NzaC1y...
次の例は、入力を要求しないため、さらに良いかもしれません。-Pは使用するパスフレーズを指定し、保護されていないキーは空のパスフレーズで開きます。
$ ssh-keygen -y -P "" -f rsa_enc
Load key "path_to_key": incorrect passphrase supplied to decrypt private key`
$ ssh-keygen -y -P "" -f rsa
ssh-rsa AAAAB3NzaC1y...
「RSAキー」は、実際には標準化されたDERバイナリ形式でASN.1構造として保存された値のセットであり、base-64でエンコードされて最終的なPEMファイルを取得します。
キーがエンコードされているかどうかを判断する非常に簡単な方法は、ASN.1ヘッダーが存在するかどうかを確認することです。これは通常、「キー」がMII
で始まるかどうかを確認するのと同じくらい簡単です。以下の例では:
----- RSAプライベートキーの開始-----
[〜#〜] mii [〜#〜] CWwIBAAKBgQCWxk9djtgA/t7n6M8g1d2fk3exyCSu1uubpxUkoFLJBKjLYiaa
[...]
eCrpRFHxhPICHI4db + I8GZ9QDmlbCN/bl3BBNNTn3w ==
----- END RSA PRIVATE KEY -----
パスワードで保護されたファイルでは、ASN.1構造全体が暗号化され、すべてランダムな文字として表示されます。
秘密鍵を保護する必要があります。パスワードを設定しようとすると、まだパスワードで保護されているかどうかが宣言されます。 ssh-keygen
保護されたキー:
~/.ssh$ ssh-keygen -p -f id_rsa_password_protected
Enter old passphrase:
そして、保護されていません:
~/.ssh$ ssh-keygen -p -f id_rsa_not_protected
Enter new passphrase (empty for no passphrase):
したがって、パスワードで保護されていない場合は、パスワードを設定を使用します。