web-dev-qa-db-ja.com

暗号化されたPGP秘密鍵をSSH認証の実行に使用するためにどのように変換できますか?

SSH認証の実行に使用される私のPGPキー(RSA)を隠したいと思います。いくつか検索したところ、openpgp2sshが見つかりました。これは適切なツールのようです。すべては私の公開鍵のために水泳で動作します:

$ gpg --export "$key" | openpgp2ssh "$key"
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC51Cw3ZxO5TSncaDLzQ89SSZAF7Z9cFR5mv4uhmGw3tDfiaAjNFVjp90YNYi2teveb5EjncIK5RMYQefKpvvsawQZ4KJKbrDFrrQbMmIG67A1qopKxn5rF8QsjzYvrlGSi9pnjfZVN+VfTaspomVpwCpe9oxd8ZlKdViABgBV8p0hL6I4Gqm+I37az9apO4wCvlN8XJMia3J1JxIShyLYGfa2ued5rRFYiCEV3/smtrjycEZ8OYLTLhC/vydhXCSYrCxWHxhv213Uho641cttaL2SlPGDX9Uuq3JfjCoC0Y6EN7/+GV2u9R48/QJpUaOjEhLRm8F/LFRuHDFYJmyNgv11DsRAMvh7psGY2196bBYSdrzfZxxCQDdJrNxNzQvIG33JavMXOiBAbAYxaq7DWWlVPcE3fy+VxYPH+XicqxD58qdWapspJhRxEKzQa7IfUULGQHVg31NYWGsN4dkva2XjV35SZf6M3nrfjz4XitiwH0SOxbXBRKUdZhwCnr+5GcsWkax7Ph6QGvWVP6mgpUDBuMQ+znkUVr8tDkmrm5M6PC6x8SOA0ecdjNKB2NK23A6w4V7lsfMvDl4uBMzxRzXOXLIUXunsZ7MQTV5ymtZvk3oYccnXNxtVZGF2Cu9Wfy+6c+XL+z4Zfc6XvPSgtBDOApV3owL86OOoLO5X3HQ==

ただし、秘密鍵を変換して使用しようとすると、次のエラーが表示されます。

$ gpg --export-secret-key "$key" | openpgp2ssh "$key"
We cannot handle encrypted secret keys.  Skipping!

私の秘密鍵は確かに暗号化されています。非標準のプラグインに頼るのではなく、PGP秘密鍵を標準のSSHプログラムが理解できるデータに変換する方法が理想的です。これは可能ですか?

8
Chris Down

私はopenpgp2sshの上流の作者の一人です。混乱させて申し訳ありません。 openpgp2ssh(1)のmanページには、「バグ」セクションが含まれていることに注意してください。

 openpgp2ssh currently cannot handle passphrase-protected secret keys on
 input.

より明確な1行のエラーメッセージを提案するか、マニュアルページの改善を提案して、ドキュメントでより簡単に答えを見つけられるようにしたら、ツールを改善できれば幸いです。 [email protected]までご連絡ください。現時点では、現在の開発者の誰もがstackexchangeを厳密にはフォローしていないと思います。そのため、メーリングリストは、連絡を取るためのより良い方法です。

8

誰も秘密鍵を変換できない場合、公開鍵を変換しても意味がありません。つまり、このプログラムはそのような変換プロセスを念頭に置いて作成されました。 「encrypted秘密鍵を処理できません。」というエラーメッセージが表示されます。

したがって、gpg --edit-keypasswdコマンドを使用して、秘密鍵のパスワードを削除することをお勧めします。変換後は、古いgpg秘密鍵と新しいssh秘密鍵の両方を再暗号化する必要があります。

ドライブに暗号化されていないキーが残っていることが心配な場合は、encfs、truecryptなどを使用して暗号化パーティションを作成するか、または ramdisk を作成します。 mlockを呼び出すためのトリックを見つけない限り、カーネルがRAMディスクをスワップしないように、ramdiskを短く短くしておく必要があります。暗号化ファイルシステムは、すでにデータページをロックしているはずです。

10
Jeff Burdges

ジェフ・バージスの素晴らしい答えは私に最終的な方法を示しました。これが私が取った正確な手順です:

key=2A7D4D74

# Back up the original key so you can reimport it afterwards
gpg --export-secret-key "$key" > id_rsa.bak

# Now remove the encryption using the method listed in Jeff Burdges' answer:
# * gpg --edit-key "$key"
# * Issue passwd and remove the password
# * Quit, and save changes

# We convert the keys
gpg --export "$key" | openpgp2ssh "$key" > ~/.ssh/id_rsa.pub
gpg --export-secret-key "$key" | openpgp2ssh "$key" > ~/.ssh/id_rsa

# Then, we change the password for the SSH secret key
ssh-keygen -f ~/.ssh/id_rsa -p

# Now reimport the original key (deletion is required or for some reason it fails to reimport as encrypted)
gpg --delete-secret-key "$key"
gpg --import < id_rsa.bak
rm id_rsa.bak
6
Chris Down