1

我正在用 JavaScript开发一个Bitbucket API 包装器。我正在尝试为添加 SSH 密钥的方法编写测试。我创建可信 SSH 密钥的天真尝试没有成功。这是我生成虚拟密钥的方式:

  1. 以“ssh-rsa”开头
  2. 附加 279 个随机字符串的 Base64 编码表示
  3. 附加“”
  4. 附加一个 16 字符的随机字符串
  5. 附加“@”
  6. 附加一个 16 字符的随机字符串
  7. 附加“.com”

当我POST以这种方式生成的 SSH 密钥时,Bitbucket 返回 400 Bad Request 。幸运的是,我可以访问 Bitbucket 的源代码,所以我能够更深入地挖掘。Bitbucket 通过运行 SSH 密钥来验证它们ssh-keygen

我不明白 SSH 密钥是如何生成的,所以我可能会问一个愚蠢的问题。是否有可能生成一个足以令人信服的 SSH 密钥ssh-keygen?这是输出:

$ ssh-keygen -l -f ~/Desktop/dummy_rsa.pub 
buffer_get_string_ret: bad string length 1903654498
key_from_blob: can't read key type
key_read: key_from_blob cXd2YnRzZXpha3Rld2V4YmdieWdoeWl2aXpla3hkaHBodnlteHl2ZHl0bnloYmRyYWZrdnVxaWR3cHBydnFmZWFkaHp0aGRwYml6ZXVxY3ZlZ3NiZ29lanl0cG9vZmlnZ2dyZmJ3aWxsdXJhb2puYWRjY3F0YW5rcGV3Z3dkc3lxd2tkb3d6emFzbXpubXJ1eGN2bm53a3l6bmRjenV1dnplbnFtZ3Z5bm96ZGZhandwcG9mcHVoaWFkZ25ud3VkdnB0enV6Zm51bWVxanhzanlwa2ZodGxpd2xld2pnY3dhbmJ6aXVyamp6c29rbm54dHp2enJmeWhnY2ZrcWlqemFscGNnbWJsY3lpcmRtYXFkbHB6c3l0 duvrnzsladfrmccr@xqrbenpfryhoklgw.com
 failed
/Users/dc/Desktop/dummy_rsa.pub is not a public key file.

需要明确的是,我不需要生成“有效”的 SSH 密钥,我只需要能够测试各种 API 端点。此外,由于测试在浏览器中运行,我无法生成密钥。

4

2 回答 2

8

SSH 密钥不仅仅是随机字符串,这就是它们无法通过验证的原因。

这里称为 Javascript Cryptography Toolkit 的库可以帮助您生成 RSA 密钥(由 SSH 使用)。

他们有一个生成密钥的演示:https ://github.com/ats4u/titaniumcore/blob/master/crypto/RSA.sample1.html

正如您从演示页面的源代码中看到的那样,该工具包的重量相当重,但如果这是您需要的,那么您就必须使用它,我猜。当然,将密钥生成卸载到服务器会更简单,但是如果您正在编写仅客户端的库,那么您必须坚持这一点。

2019 年更新:更新了 github 的链接。

于 2011-11-12T09:51:03.120 回答
1

如果您最终对现有的轻量级 Ruby Sinatra 应用程序进行 AJAX 调用以生成和检索 SSH 密钥,您可以使用 sshkey Gem 来执行此操作https://rubygems.org/gems/sshkey

这并没有回答如何在纯 JavaScript 中执行此操作,而是根据您的特定应用程序架构提供了另一种途径(请参阅问题下方的评论)。

于 2011-11-12T10:00:20.377 回答