簡體   English   中英

jenkins 中的私有 git npm 存儲庫的主機密鑰驗證失敗

[英]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討論了解決該問題的策略。

  1. 一種解決方案可能是將 keyscan 調用更改為ssh-keyscan -t 'ssh-rsa,ssh-dss' $AGENT_HOSTNAME_OR_IP以收集其他密鑰。 我還考慮使用~作為.ssh目錄的位置,而不是$HOME我注意到在最近的工作中進行故障排除時有所不同。 使用sh "printenv | sort"顯示作業中當前ENVIRONMENT變量的准確值。

  2. 另一種解決方案,可能不太合適,是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM