2017-12-18 255 views
1

我想在一个作为詹金斯管道的一部分运行的码头容器里面执行一些git查询。 在Docker容器的外面,sshsgent工作正常,我可以访问我的SCM没有问题。在容器内部,我得到了主机密钥验证问题。
任何人都可以帮我解决我犯的错误吗?詹金斯管道里面的码头里面的Git不工作

script { 
    sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519']) 
    { 
     sh(""" 
      ssh -p 7999 [email protected] whoami 
     """) 
    } 
    docker.withRegistry('https://dockerhub.banana.com', 'banana-dockerhub-credential') 
    { 
     docker.image('banana_release_base').pull() 
     docker.image('banana_release_base').inside(
     ''' 
      -v /system:/system -v /tmp:/tmp --privileged -u 0 
     ''' 
     ) 
     { 
      sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519']) 
      { 
       sh(""" 
        echo $SSH_AUTH_SOCK 
        ssh -p 7999 [email protected] whoami 
       """) 
      } 
     } 
    } 
} 

首先WHOAMI呼叫输出:

[docker_git_test] Running shell script 
+ ssh -p 7999 [email protected] whoami 
d42967b44abe31d6 

第二呼叫(和回声)在搬运工容器输出:

[docker_git_test] Running shell script 
+ echo /tmp/ssh-dSoDZMggpAU1/agent.13 
/tmp/ssh-dSoDZMggpAU1/agent.13 
+ ssh -p 7999 [email protected] whoami 
Host key verification failed 

回答

2

主机键验证失败

S容器中的SH连接无法验证主机的(bitbucket-eng-gpk1.com)身份,这是它失败的原因。当詹金斯提供一个容器时,它会试图限制外部世界的事物数量,比如环境变量和文件系统的位置,这些构建步骤会被隔离。在您的容器中,它在进行连接之前未接受VCS的主机密钥,并且它不是交互式终端,因此会失败。

有几种不同的方法来处理这个问题。下面是一些我能想到的把我的头顶部:

  • 忽略主机密钥检查(明白这个(安全隐患12)) - 使用StrictHostKeyChecking选项来禁用检查。 UserKnownHostsFile选项可以在连接其他地方管理接受的键时使用。这也可以通过~/.ssh/config文件中的每个主机完成。

    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 7999 [email protected] whoami 
    
  • 建立SSH密钥进入多克尔图像(脆)

  • 挂载~/.ssh/config文件到从与
  • 主机的容器从主“安装”一些SSH配置文件,或者使用一些其他配置文件提供程序已将验证的主机密钥装入容器(可能使用Config File Provider Plugin
+0

谢谢!我以错误的方式看待:/我认为主持人阻止了我的钥匙。 已添加到.ssh/config文件中,它现在正在工作:) 再次感谢 –

+0

@ user2961873在这种情况下,您应该看到喜欢'denied:public key'(或类似的东西)的东西来向您显示身份验证失败。 – mkobit

1

只是为了显示我的工作。在mkobits的建议上,我在sh命令中添加了两行来编写解决问题的ssh配置文件。

sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519']) 
     { 
      sh(""" 
       echo $SSH_AUTH_SOCK 
       mkdir ~/.ssh 
       echo 'Host *\n StrictHostKeyChecking no' > ~/.ssh/config 
       ssh -p 7999 [email protected] whoami 
      """) 
     } 

它可以内置到dockerfile中,但由于我使用共享映像,所以这种方式适合我的目的。

编辑:我已经加入到dockerfile如此,我们在这里:

RUN useradd -r -u 1000 builder 
COPY config /home/builder/.ssh/config 
RUN chown builder:builder /home/builder/.ssh/* 
USER builder 
ENTRYPOINT ["/bin/bash"] 

添加非root用户,这样文件不会留在工作区的根。 需要运行chown,并将添加的文件添加到作为所有者的根。 获取添加的配置文件是:

Host * 
    StrictHostKeyChecking no 

干杯!