2017-04-19 5 views
5

My Node.JSプロジェクトにはgithubでホストされているプラ​​イベートNPMリポジトリへの参照が含まれています。これはローカルでうまく動作しますが、私はこれをElastic Beanstalkで動作させるのに苦労しています。Elastic BeanstalkでのgithubプライベートレポアクセスのためのSSHキーの設定

dependencies: { 
    ... 
    "express": "^4.12.4", 
    "jsonwebtoken": "^5.0.5", 
    "my-private-module": "[email protected]:<my-user>/<my-repo>.git#<my-version>", 
    ... 
} 

-

私は必要なもの、ソースコントロールに秘密鍵などを格納することなく、私のElastic Beanstalkでインスタンス上のgitの作業SSHの構成を設定することができることです。

明らかに、EBインスタンスは私のプライベートgithub reposにアクセスするために必要なSSH鍵を持っていません。 username:[email protected]でHTTPSスタイルのgit URLを使用するとうまくいきます。 githubが提供するoauth token method(本質的にはuser:passです)を使っても動作します。しかし、私はソース管理にチェックインするための資格情報を必要としないので、私はgithubから私のEBインスタンスでSSH経由で動作するようにクローンを作成しようとしています。

私はnpm preinstallツリーが構築された後、変更作られたプリインストールを実行するためのNPM2まで働いていたthis blog postによると、スクリプト、およびその問題がまだ保留されている修正するためのPRを含め、百万個の方法を試してみました。

私はENV変数ではないため、それ自体では、環境変数(トリッキーから来るトークンのOAuthとHTTPSのURLに[email protected]insteadofを配置するgit configを呼び出そうと.ebextensionsコマンドの設定を試してみました起動時にこの時点で設定され、$ HOMEがないとgitの設定は混乱します)。

this solution from the comments on the mentioned blog postを含む.ebextensionsを使用して、私のEBインスタンスにSSHを設定するさまざまな方法を試みました。これは基本的に私が今こだわっている場所です。

  • 私は成功した鍵ペアを作成している、私のgithubのプロファイルにそれを設定し、
  • 私のレポのクローンを作成するために、私のローカルクライアントからの秘密鍵が使用可能であることを確認し、私は自分の秘密鍵とsshを入れていますプライベートS3バケット
  • 上の設定ファイルIはthis example
  • に応じてIで/ tmpを/一覧表示デバッグcommands.ebextensionsコンフィギュレーションを作成しました/tmp/.ssh/に私のS3バケットからコピーし、これらの2つのファイルを、.ebextensionsfilesコンフィギュレーションを作成しました.ssh a

/tmp/.ssh/configは含まれています:

Host github.com 
    IdentityFile /tmp/.ssh/deploy_key 
    IdentitiesOnly yes 
    UserKnownHostsFile=/dev/null 
    StrictHostKeyChecking no 

/tmp/.ssh/deploy_keyはローカルで動作することが確認された私の秘密鍵が含まれているファイルが正常にS3からダウンロードされたことを示していND 。

しかし、gitがまだエラーがスローされます:

npm ERR! Command failed: git clone --template=/tmp/.npm/_git-remotes/_templates --mirror ssh://[email protected]/[.....] 
npm ERR! Cloning into bare repository '/tmp/.npm/_git-remotes/git-ssh-git-github-com-[...] 
npm ERR! Host key verification failed. 
npm ERR! fatal: Could not read from remote repository. 
npm ERR! 
npm ERR! Please make sure you have the correct access rights 
npm ERR! and the repository exists. 

私は今アイデアが不足しています。私の最高の推測は/tmp/.sshがgitがssh設定ファイルを探すためのパスではないということです。リンクされたソリューションが提案されたが、後のAMI:sなどで変更されたかもしれません。EBの開始時に使用される環境は少し制限されているようです。コマンドはユーザーnodejsとして実行されますが、$ HOMEがどこにも設定されていない場合でも、/ tmpはホームディレクトリとして使用されているようです。

どうすれば私のSSH設定を取得し、結果的に私のSSHキーを使うことができますか?どのようにしてgitがSSH設定ファイルを探すのか調べるには?通常は〜/ .sshに入っていますが、$ HOMEは設定されていないので、これは簡単ですが簡単ですがナットを運転しています。

答えて

5

一日の闘争の後、最終的に私が以前に見逃していた非常によく似た質問にthis answer上でつまずき、それはない、EB上のgitによってピックアップするために、SSHキーを入れるための正しい場所が/root/.sshである判明/tmp/.ssh,なし/home/ec2-user/.ssh

私の最終的な設定(<my-bucket>/github-eb-keyのS3バケットにあるプライベートSSHキーがあり、対応する公開鍵はとして設定されたAMIを使用して、リポジトリにアクセスできるgithubユーザに登録されていると仮定します)次の内容で.ebextensions/01_ssh_setup.config

Resources: 
    AWSEBAutoScalingGroup: 
    Metadata: 
     ? "AWS::CloudFormation::Authentication" 
     : 
     S3Auth: 
      buckets: 
      - <my-bucket> 
      roleName: 
      ? "Fn::GetOptionSetting" 
      : 
       DefaultValue: aws-elasticbeanstalk-ec2-role 
       Namespace: "aws:asg:launchconfiguration" 
       OptionName: IamInstanceProfile 
      type: s3 
files: 
    /root/.ssh/github-eb-key: 
    authentication: S3Auth 
    mode: "000600" 
    owner: root 
    group: root 
    source: "https://s3-eu-west-1.amazonaws.com/<my-bucket>/github-eb-key" 
    /root/.ssh/config: 
    mode: "000600" 
    owner: root 
    group: root 
    content: | 
     Host github.com 
     IdentityFile /root/.ssh/github-eb-key 
     IdentitiesOnly yes 
     UserKnownHostsFile=/dev/null 
     StrictHostKeyChecking no 
関連する問題