在JavaScript中生成格式良好的SSH密钥
我正在用JavaScript开发一个应用程序。我正在尝试为添加SSH密钥的方法编写测试。我天真地尝试创建可信的SSH密钥,但没有成功。下面是我如何生成虚拟密钥的:在JavaScript中生成格式良好的SSH密钥,javascript,ssh-keys,bitbucket-api,Javascript,Ssh Keys,Bitbucket Api,我正在用JavaScript开发一个应用程序。我正在尝试为添加SSH密钥的方法编写测试。我天真地尝试创建可信的SSH密钥,但没有成功。下面是我如何生成虚拟密钥的: 从“ssh-rsa”开始 附加279个随机字符字符串的Base64编码表示形式 附加“” 附加16个随机字符的字符串 附加“@” 附加16个随机字符的字符串 附加“.com” 当我以这种方式生成时,Bitbucket返回400个错误请求。幸运的是,我可以访问Bitbucket的源代码,所以我能够更深入地挖掘。Bitbucket通过运行
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端点。另外,由于测试是在浏览器中运行的,所以我无法使用shell生成密钥。SSH密钥不仅仅是随机的字符串,因此它们无法通过验证 这个名为Javascript加密工具包的库可以帮助您生成RSA密钥(由SSH使用) 他们有一个生成密钥的演示: 正如您从演示页面的源代码中看到的,该工具包相当重,但是如果这是您所需要的,那么我想这就是您必须使用的。当然,只需将密钥生成卸载到服务器上会简单得多,但是如果您正在编写一个仅客户端的库,那么您必须坚持这一点
2019更新:更新了github的链接 SSH密钥不仅仅是随机的字符串,所以这就是它们不能通过验证的原因 这个名为Javascript加密工具包的库可以帮助您生成RSA密钥(由SSH使用) 他们有一个生成密钥的演示: 正如您从演示页面的源代码中看到的,该工具包相当重,但是如果这是您所需要的,那么我想这就是您必须使用的。当然,只需将密钥生成卸载到服务器上会简单得多,但是如果您正在编写一个仅客户端的库,那么您必须坚持这一点
2019更新:更新了github的链接 如果您最终对现有的轻量级Ruby Sinatra应用程序进行AJAX调用以生成和检索SSH密钥,那么您可以使用sshkey Gem来完成此操作
这并没有回答如何在纯JavaScript中实现这一点,而是根据您的特定应用程序体系结构提供了另一种途径(请参见问题下方的注释) 如果您最终对现有的轻量级Ruby Sinatra应用程序进行AJAX调用以生成和检索SSH密钥,那么您可以使用sshkey Gem来完成此操作
这并没有回答如何在纯JavaScript中实现这一点,而是根据您的特定应用程序体系结构提供了另一种途径(请参见问题下方的注释) 您不能“掏腰包”生成密钥,但是您可以从浏览器发出AJAX请求,从服务器检索生成的(或有效的)SSH密钥吗?@JohnK如果需要,可以。我正在通过一个轻量级的Sinatra应用程序代理请求,不过如果可能的话,我宁愿避免让它成为一个中间人。你不能“掏钱”生成密钥,但你能从浏览器发出AJAX请求,从服务器检索生成的(或有效的)SSH密钥吗?@JohnK如果必要,可以。我正在通过一个轻量级的Sinatra应用程序代理请求,不过如果可能的话,我宁愿避免让它成为更多的中间人。谢谢,John。完美的不。实用的当然可以。谢谢你,约翰。完美的不。实用的当然。那些链接断了。这些链接断了