2011-11-12 2 views
1

JavaScript로 Bitbucket API wrapper을 개발 중입니다. SSH 키를 추가하는 메서드에 대한 테스트를 작성하려고합니다. 믿을만한 SSH 키를 만드는 나의 순진한 시도는 실패했습니다. "SSH-RSA" JavaScript로 올바른 형식의 SSH 키 생성

  • 는 임의의 문자의 279 문자열
  • APPEND ""
  • 는 16를 추가의 Base64로 인코딩 된 표현을 추가로

    1. 시작 : 여기 더미 키를 생성하는 방법은 임의의 문자의 문자열
    2. APPEND "@"
    3. 는 임의의 문자의 16 문자열
    4. APPEND ".COM"
    5. 0123를 추가

    Bitbucket은 이러한 방식으로 POST an SSH key이 생성 될 때 400 Bad Request를 반환합니다. 다행스럽게도 Bitbucket의 소스 코드에 액세스 할 수 있으므로 조금 더 자세히 파고들 수 있습니다. Bitbucket은 ssh-keygen을 통해 SSH 키를 실행하여 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

    키를 생성하기 위해 "쉘 아웃"할 수는 없지만 브라우저에서 생성 된 (또는 유효한) SSH 키를 검색하려면 AJAX 요청을 할 수 있습니까? –

    +0

    @JohnK 필요한 경우 예. 가벼운 Sinatra 앱을 통해 요청을 프록시 처리하고 있지만 가능하다면 중개자 이상의 것을 사용하지 않는 것이 좋습니다. – davidchambers

    답변

    7

    SSH 키는 임의의 문자 스트링이 아니므로 인증을 통과하지 못합니다.

    이 라이브러리 here은 Javascript Cryptography Toolkit을 사용하여 SSH에서 사용하는 RSA 키를 생성하는 데 도움을 줄 수 있습니다.

    그들은 키 생성의 데모가 : http://ats.oka.nu/titaniumcore/js/crypto/RSA.sample1.html

    당신이 데모 페이지의 소스 코드에서 볼 수 있듯이이 툴킷은 아주 무거운 무게를,하지만 그건 당신이 필요하다면, 그 다음은 당신이 무엇을 사용하는 것 같아요. 물론 핵심 생성물을 서버에로드하는 것이 훨씬 간단했을 지 모르겠지만 클라이언트 측 라이브러리 만 작성한다면이 작업을 계속해야합니다.

    1

    당신이 생성하고 SSH 키를 검색하기 위해 기존의 경량 루비시나 응용 프로그램에 AJAX 호출을 끝낼 경우, 당신은 너무 https://rubygems.org/gems/sshkey

    이 그것을 수행하는 방법에 응답하지 않는 수행 할 SSHKEY의 보석을 사용할 수 있습니다 순수한 자바 스크립트이지만 특정 응용 프로그램 아키텍처에 기반한 대체 수단을 제공합니다 (아래의 주석 참조).

    +0

    고마워, 존. 이상? 아니. 바쁜? 명확히. – davidchambers