Создать правильно сформированный ключ SSH в JavaScript - PullRequest
1 голос
/ 12 ноября 2011

Я разрабатываю обертку Bitbucket API в JavaScript.Я пытаюсь написать тесты для метода, который добавляет ключ SSH.Моя наивная попытка создать правдоподобный ключ SSH не увенчалась успехом.Вот как я сгенерировал фиктивный ключ:

  1. начинаем с "ssh-rsa"
  2. и добавляем в кодировке Base64 представление из 279 символов случайных символов
  3. append ""
  4. добавление 16-символьной строки случайных символов
  5. append "@"
  6. добавление 16-символьной строки случайных символов
  7. append ".com "

Bitbucket возвращает 400 неверных запросов, когда я POST генерирует ключ SSH , сгенерированный таким образом.К счастью, у меня есть доступ к исходному коду Битбакета, так что я смог покопаться немного глубже.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.Кроме того, поскольку тесты выполняются в браузере, я не могу выложить ключ для генерации ключа.

Ответы [ 2 ]

7 голосов
/ 12 ноября 2011

SSH-ключи - это не просто случайные строки символов, поэтому они не проходят проверку.

Эта библиотека здесь называется Javascript Cryptography Toolkit и может помочь вам генерировать ключи RSA (используемые SSH).

У них есть демо генерации ключа: https://github.com/ats4u/titaniumcore/blob/master/crypto/RSA.sample1.html

Как вы можете видеть из исходного кода демонстрационной страницы, набор инструментов довольно тяжелый, но если это то, что вам нужно, то это то, что вы должны использовать, я думаю. Конечно, было бы намного проще просто перенести генерацию ключей на сервер, но если вы пишете только клиентскую библиотеку, то вам следует придерживаться этого.

2019 обновление: обновлены ссылки на github.

1 голос
/ 12 ноября 2011

Если вы в конечном итоге сделаете AJAX-вызов для своего существующего облегченного приложения Ruby Sinatra для генерации и получения ключа SSH, вы можете использовать Gem sshkey для этого https://rubygems.org/gems/sshkey

Это не 't, как сделать это на чистом JavaScript, но предоставляет альтернативный путь, основанный на вашей конкретной архитектуре приложения (см. вопрос ниже в комментариях).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...