我正在使用JavaScript开发Bitbucket API wrapper。我正在尝试为添加SSH密钥的方法编写测试。我天真地试图创建一个可信的SSH密钥是不成功的。以下是我生成虚拟密钥的方法:
当我POST an SSH key以这种方式生成时,Bitbucket返回400 Bad Request。幸运的是我可以访问Bitbucket的源代码,所以我能够深入挖掘一下。 Bitbucket通过ssh-keygen
运行SSH密钥来验证它们。
我不明白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端点。此外,由于测试在浏览器中运行,我无法生成密钥。
答案 0 :(得分:7)
SSH密钥不仅仅是随机字符串,因此它们不会通过验证。
这个名为Javascript Cryptography Toolkit的库here可以帮助您生成RSA密钥(由SSH使用)。
他们有一个生成密钥的演示:https://github.com/ats4u/titaniumcore/blob/master/crypto/RSA.sample1.html
正如您从演示页面的源代码中看到的那样,该工具包非常重要,但如果这就是您所需要的,那么我猜你必须使用它。当然,将密钥生成卸载到服务器会简单得多,但如果你只编写一个客户端库,那么你必须坚持这一点。
2019更新:更新了指向github的链接。
答案 1 :(得分:1)
如果您最终对现有的轻量级Ruby Sinatra应用程序进行AJAX调用以生成和检索SSH密钥,则可以使用sshkey Gem来执行此操作https://rubygems.org/gems/sshkey
这不会回答如何在纯JavaScript中执行此操作,而是根据您的特定应用程序体系结构提供备用途径(请参阅下面的问题评论)。