10

私の Node.JS プロジェクトには、github でホストされているプラ​​イベート NPM リポジトリへの参照が含まれています。これはローカルでは問題なく機能しますが、Elastic Beanstalk でこれを機能させるのに苦労しています。

dependencies: {
  ...
  "express": "^4.12.4",
  "jsonwebtoken": "^5.0.5",
  "my-private-module": "git@github.com:<my-user>/<my-repo>.git#<my-version>",
  ...
}

-

私が必要としているのは、ソース管理に秘密鍵などを保存することなく、Elastic Beanstalk インスタンスで git 用に機能する SSH 構成をセットアップできることです。

明らかに、EB インスタンスには、プライベート github リポジトリにアクセスするために必要な SSH キーがありません。username:password@github.comインラインでHTTPS スタイルの git URL を使用すると、正常に動作します。また、github が提供するoauth トークン メソッド(基本的には user:pass) を使用して動作します。しかし、資格情報をソース管理にチェックインさせたくないので、EB インスタンスで SSH 経由で github からクローンを作成しようとしています。

このブログ投稿npm preinstallによると、スクリプトを含む何百万もの方法を試しました。これは、ツリーが構築された後に実行するように変更が preinstall される npm2 まで機能し、その問題を修正するための PR はまだ保留中です。

環境変数からの OAUTH トークンを使用して、git@github.com を HTTPS URL に配置する.ebextensionsために呼び出すコマンド構成を試しました (この時点で環境変数が起動時に設定されていないため、それ自体がトリッキーです) $HOME の欠如は git config を混乱させます)。git configinsteadof

また、前述のブログ投稿のコメントからのこのソリューション.ebextensionsを含め、EB インスタンスで SSH をセットアップするために使用するさまざまな方法を試しました。これは基本的に私が今行き詰まっているところです。

  • キー ペアを正常に作成し、それを github プロファイルに設定し、ローカル クライアントからプライベート キーを使用してリポジトリを複製できることを確認しました。
  • 秘密鍵と ssh 構成ファイルをプライベート S3 バケットに配置しました
  • この例に従って.ebextensions files、これら 2 つのファイルを S3 バケットから にコピーする構成を作成しました。/tmp/.ssh/
  • commands .ebextensions/tmp/.ssh を一覧表示し、ファイルが S3 から正常にダウンロードされたことを示すデバッグ構成を作成しました。

/tmp/.ssh/config には以下が含まれます。

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

/tmp/.ssh/deploy_key には、ローカルで動作することが確認されている秘密鍵が含まれています。

ただし、git はまだエラーをスローします。

npm ERR! Command failed: git clone --template=/tmp/.npm/_git-remotes/_templates --mirror ssh://git@github.com/[.....]
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 がホームディレクトリとして使用されているようです。

git に SSH 構成を取得させ、その結果として SSH キーを使用させるにはどうすればよいですか? git が SSH 構成ファイルを探す場所を見つけるにはどうすればよいですか? 通常は ~/.ssh にありますが、$HOME が設定されていないため、これは簡単なはずですが、気が狂いそうになります。

4

1 に答える 1