私の 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 config
insteadof
また、前述のブログ投稿のコメントからのこのソリューション.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 が設定されていないため、これは簡単なはずですが、気が狂いそうになります。