22

SSH キーペアを生成する必要がある Ruby/Rack アプリケーションに取り組んでいます。アプリケーションから呼び出したいssh-keygenのですが、Heroku で実行するように設計されており、そのコマンドの呼び出しをサポートしていないため、できません。

Ruby標準ライブラリでOpenSSLを使用して、次のことを行って秘密/公開RSAキーを取得できました。

key = OpenSSL::PKey::RSA.generate(2048)
# => -----BEGIN RSA PRIVATE KEY----- ....
key.public_key
# => -----BEGIN RSA PUBLIC KEY----- ....

残念ながら、RSA 公開鍵と SSH 公開鍵は同じ RSA 鍵から生成できますが、同じものではありません。SSH 公開鍵は次のようになります。

ssh-rsa AAAAB3NzaC1yc2EAAAABIwA.....

を使用せずにRubyでSSHキーを生成したり、RSAキーをSSHに変換したりすることは可能ssh-keygenですか?

4

3 に答える 3

28

問題が発生したときはそうではなかったかもしれませんが、net-sshライブラリはOpenSSL::PKey::RSA::DSAに次の 2 つの方法でパッチを適用します。

#ssh_type- 返品"ssh-rsa"または必要"ssh-dss"に応じて

そして#to_blob- 公開鍵を OpenSSH バイナリ blob 形式で返します。base64 でエンコードすると、探している形式になります。

require 'net/ssh'

key = OpenSSL::PKey::RSA.new 2048

type = key.ssh_type
data = [ key.to_blob ].pack('m0')

openssh_format = "#{type} #{data}"
于 2012-04-29T20:20:51.083 に答える
15

これは、私が予想していたよりもはるかに複雑であることがわかりました。私はそれをやってのけるためにSSHKey gemを書くことになりました( GitHubのソースコード)。SSH 公開鍵は、提供される RSA 公開鍵とはまったく異なる方法でエンコードされます。SSH キーのデータ型エンコーディングは、RFC #4251のセクション #5 で定義されています。

于 2011-03-13T05:33:46.523 に答える
-1
key.public_key.to_pem

キーの暗号化を含む完全なプロセスは、http ://stuff-things.net/2009/12/11/generating-rsa-key-pairs-in-ruby/ で文書化されています。

于 2011-03-11T09:21:08.323 に答える