2011-11-12 32 views
1

我正在使用JavaScript開發Bitbucket API wrapper。我正在嘗試爲添加SSH密鑰的方法編寫測試。我天真地嘗試創建一個可信的SSH密鑰並不成功。下面是如何生成的虛擬按鍵:在JavaScript中生成格式良好的SSH密鑰

  1. 開始與「SSH-RSA」
  2. 追加隨機字符279字符串
  3. 追加「」
  4. 追加16的Base64編碼表示隨機字符字符串
  5. 追加「@」
  6. 追加隨機字符16字符串
  7. 追加「.COM」

當我以這種方式生成I POST an SSH key時,Bitbucket返回400錯誤請求。幸運的是,我可以訪問Bitbucket的源代碼,所以我可以深入一點。 Bitbucket通過運行ssh-keygen來驗證SSH密鑰。

我不明白如何生成SSH密鑰,所以我可能會問一個愚蠢的問題。是否有可能生成足以說服傻瓜ssh-keygen的SSH密鑰?下面是輸出:

$ 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 [email protected] 
failed 
/Users/dc/Desktop/dummy_rsa.pub is not a public key file. 

要清楚,我並不需要生成一個「有效」 SSH密鑰,我只需要能夠測試各種API端點。另外,由於測試在瀏覽器中運行,所以我無法生成一個密鑰。

+1

您不能「出殼」生成密鑰,但是您可以向瀏覽器發出AJAX請求以從服務器檢索生成的(或有效的)SSH密鑰? –

+0

@JohnK如果有必要,是的。我通過一個輕量級的Sinatra應用程序來代理請求,儘管如果可能的話我寧願避免讓它比中間人更多。 – davidchambers

回答

7

SSH密鑰不只是隨機字符串,所以這就是爲什麼他們不通過驗證。

這個庫here調用Javascript加密工具包可以幫助您生成RSA密鑰(由SSH使用)。

他們生成密鑰的演示:http://ats.oka.nu/titaniumcore/js/crypto/RSA.sample1.html

你可以從演示頁面的源代碼中看到,該工具包是相當沉重的重量,但如果這就是你所需要的,那麼這就是你所擁有的使用,我猜。當然,將密鑰生成卸載到服務器上會簡單得多,但如果你只寫一個客戶端庫,那麼你必須堅持這一點。

1

如果您最終使一個AJAX調用現有的輕量級的Ruby應用程序西納特拉生成和檢索SSH密鑰,你可以使用寶石SSHKEY這樣做https://rubygems.org/gems/sshkey

這不回答怎麼辦呢在純JavaScript中,但提供了基於特定應用程序體系結構的替代方法(請參閱下面的註釋問題)。

+0

謝謝,約翰。理想?不。務實?當然。 – davidchambers