我的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>",
...
}
-
我需要的是能夠建立在我的魔豆彈性git的情況下工作的SSH配置,而無需密鑰等存儲在源代碼控制。
顯然,EB實例沒有所需的SSH密鑰來訪問我的私人github回購。如果我使用內嵌username:[email protected]
的HTTPS風格的git URL,則可以正常工作。它也可以使用github提供的oauth token method(它本質上是一個用戶:pass)。但我不希望將任何憑據簽入到源代碼控制中,所以我試圖從github上克隆我的EB實例上的SSH工作。
我試過一百萬種方法,包括npm preinstall
腳本根據this blog post,它曾經工作到npm2,其中一個更改使得預安裝在構建樹之後運行,並且解決該問題的PR仍未解決。
我已經試過了試圖調用git config
對[email protected]的insteadof
放置到HTTPS URL與環境變量(棘手進來本身,因爲ENV變量不是令牌一個OAuth的.ebextensions
命令配置在這個時候在啓動週期中設置,並且$ HOME的缺失使git config感到困惑)。
我也嘗試過使用.ebextensions
在我的EB實例上設置SSH的各種不同方式,包括this solution from the comments on the mentioned blog post。這基本上是我現在卡住的地方。
- 我已經成功地創建一個密鑰對,將其設置在我github上的個人資料,並驗證了私鑰是從我的本地客戶端可用於克隆我的回購
- 我已經把我的私人密鑰和SSH在一個私人的S3存儲
- 我創建了一個
.ebextensions
files
配置,從我的S3存儲將這兩個文件拷貝到/tmp/.ssh/
,根據this example - 配置文件我已經創建了一個調試
commands
.ebextensions
配置,其中列出的/ tmp/.ssh a ND表明文件從S3下載成功:
/tmp/.ssh/config包含:
Host github.com
IdentityFile /tmp/.ssh/deploy_key
IdentitiesOnly yes
UserKnownHostsFile=/dev/null
StrictHostKeyChecking no
/tmp/.ssh/deploy_key包含我這是驗證在本地工作的私鑰。
然而,混帳仍然拋出一個錯誤:
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
運行,但/ tmp似乎用作主目錄,即使$ HOME未在任何地方設置。
我怎樣才能讓git拿起我的SSH配置,然後使用我的SSH密鑰?我怎樣才能找出git在哪裏查找SSH配置文件?通常它在〜/ .ssh中,但是由於$ HOME沒有設置,所以......這應該很容易,但是讓我感到很緊張。