[英]Host key verification fails for a private git npm repository in jenkins
我們有一個節點項目,它使用一些私有的 bitbucket 存儲庫作為 npm 依賴項。 這些添加到我們的package.json
,如下所示:
"errors": "git+ssh://git@bitbucket.org/[USER]/[REPO].git",
我們有一個 jenkins 構建作業,它是用Jenkinsfile
定義的。 此文件使用Credentials Plugin定義一個私有 ssh 密鑰,該密鑰在構建作業中用於拉取私有存儲庫,如下所示:
stage('Install dependencies') {
container('node-image') {
sshagent(['degov-git']) {
sh 'mkdir $HOME/.ssh && touch $HOME/.ssh/known_hosts && chmod 600 $HOME/.ssh/known_hosts'
sh 'ssh-keyscan -t rsa bitbucket.org >> $HOME/.ssh/known_hosts'
sh 'npm install'
}
}
}
但是,我們收到主機密鑰驗證失敗的錯誤:
[2019-05-05T07:36:26.027Z] npm ERR! Error while executing:
[2019-05-05T07:36:26.027Z] npm ERR! /usr/bin/git ls-remote -h -t ssh://git@bitbucket.org/[USER]/[REPO].git
[2019-05-05T07:36:26.027Z] npm ERR! Host key verification failed.
在 Jenkins 中使用 sshagent 時是否可以添加主機密鑰? 我們將如何做這件事?
謝謝。
很可能, bitbucket.org
有許多面向公眾的服務器,因此在單個 URI 上執行密鑰掃描不一定有效(當隨機到達不同的服務器時)。 此外,將( >>
而不是>
)附加到known_hosts
文件的策略最終會生成一個非常大的文本文件,其中包含重復的、可能是沖突的條目。 Cloudbees討論了解決該問題的策略。
一種解決方案可能是將 keyscan 調用更改為ssh-keyscan -t 'ssh-rsa,ssh-dss' $AGENT_HOSTNAME_OR_IP
以收集其他密鑰。 我還考慮使用~
作為.ssh
目錄的位置,而不是$HOME
我注意到在最近的工作中進行故障排除時有所不同。 使用sh "printenv | sort"
顯示作業中當前ENVIRONMENT
變量的准確值。
另一種解決方案,可能不太合適,是在2017 年年中之前恢復到 SSH 代理的先前行為,在那里它將StrictHostKeyChecking
設置StrictHostKeyChecking
關閉。 (在一個安全的 LAN 上,Jenkins 服務器和本地 Git 服務器彼此相鄰——也許是通過一個私有網絡——這可能沒問題。)這是通過用一些東西擦洗和重寫~/.ssh/config
文件來完成的比如sh "mkdir -p ~/.ssh && echo 'Host *' > ~/.ssh/config && echo ' StrictHostKeyChecking no'
。我想今天我不會在開放的網絡上這樣做,但這是一個值得考慮的選擇當地。
注意: Jenkins 上的sshagent
另一個常見錯誤報告說no user exists for uid
因此ssh
操作失敗。 幾個版本之前, SSH
代理更新了一個底層庫,現在需要在系統上配置用戶。 同樣,這可以通過類似於此 Jenkins 票證中的解決方案的方法來解決。
希望這里的信息能找到其他人可能會偶然發現這個問題作為相關故障排除關鍵字的第一個搜索結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.