jenkins中的私人git npm存储库的主机密钥验证失败

时间:2019-05-05 08:25:26

标签: node.js git jenkins npm

我们有一个节点项目,该项目使用一些私有bitbucket存储库作为npm依赖项。这些内容如下添加到我们的package.json中:

"errors": "git+ssh://git@bitbucket.org/[USER]/[REPO].git",

我们有一个用Jenkinsfile定义的jenkins构建作业。该文件使用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时是否可以添加主机密钥?我们将如何去做?

谢谢。

1 个答案:

答案 0 :(得分:0)

就像bitbucket.org一样,有许多面向公众的服务器,因此不一定要对单个URI进行按键扫描(当随机访问其他服务器时)。同样,将(>>而不是>附加到known_hosts文件的策略最终将形成一个非常大的文本文件,其中包含重复的条目,可能会有冲突。 Cloudbees讨论了解决问题的策略。

  1. 一种解决方案可能是将按键扫描调用更改为ssh-keyscan -t ‘ssh-rsa,ssh-dss’ $AGENT_HOSTNAME_OR_IP,以收集其他按键。我还会考虑使用~作为.ssh目录的位置,而不是$HOME,因为我注意到这在最近的问题排查中是不同的。使用sh "printenv | sort"可以显示作业中当前ENVIRONMENT变量的确切值。

  2. 另一种解决方案,也许不是可口的,是恢复到SSH代理until mid-2017的先前行为,该行为将StrictHostKeyChecking关闭。 (在Jenkins服务器和本地Git服务器彼此相邻的安全LAN上-也许在专用网络上-可以这样做。)这可以通过使用类似以下方法来清理和重写~/.ssh/config文件来完成: sh "mkdir -p ~/.ssh && echo 'Host *' > ~/.ssh/config && echo ' StrictHostKeyChecking no'。我想今天我不会在开放的Web上执行此操作,但这是一个值得在本地考虑的选项。

注意::Jenkins上sshagent中的另一个常见错误报告no user exists for uid,因此ssh操作失败。几个版本之前,SSH代理更新了一个基础库,该库现在需要系统上的预配置用户。同样,可以使用类似于solution in this Jenkins ticket的方法来解决此问题。

希望这里的信息找到其他可能会误以为是相关疑难解答关键字的第一个搜索结果的人。