2017-12-18 2 views
1

젠킨스 파이프 라인의 일부로 실행되는 도커 컨테이너에서 일부 git 쿼리를 수행하려고합니다. 바깥 쪽 도커 컨테이너 sshsgent가 잘 작동하고 SCM에 아무런 문제없이 액세스 할 수 있습니다. 컨테이너 내부에서 키 확인 문제가 발생합니다.
누구나 내가 실수 한 것을 도울 수 있습니까?Jenkins 파이프 라인 내부의 도커 내부에 자식이 있습니다.

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) ID를 확인할 수 없으므로 실패했습니다. Jenkins는 컨테이너를 프로비저닝 할 때 환경 변수 및 파일 시스템 위치와 같은 외부의 항목을 제한하여 빌드 단계가 격리되도록 해당 컨테이너에 마운트하려고 시도합니다. 컨테이너에서 VCS의 호스트 키를 수락하지 않고 연결하기 전에 대화 형 터미널이 아니므로 실패합니다.

여러 가지 방법으로 처리 할 수 ​​있습니다. 여기에 난 내 머리 위로 떨어져 생각할 수있는 몇 가지 있습니다 :

  • (이것의 보안 문제 (1, 2을) 이해) 호스트 키 검사를 무시 - 검사를 비활성화 할 수 StrictHostKeyChecking 옵션을 사용합니다. UserKnownHostsFile 옵션은 허용 된 키를 다른 곳으로 파이프하는 데 유용 할 수 있습니다. 호스트 당 ~/.ssh/config 파일로이 작업을 수행 할 수도 있습니다.

    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 7999 [email protected] whoami 
    
  • 있는 호스트에서 컨테이너에 (취성)

  • 마운트 ~/.ssh/config 파일 도커 이미지에 SSH 키를 구축 호스트에서 일부 SSH 설정 파일을 "설치"또는 일부를 사용 컨테이너에 확인 된 호스트 키가있는 다른 구성 파일 공급자 (가능하면 Config File Provider Plugin을 사용)
+0

감사합니다. 나는 그것을 잘못보고 있었다 :/나는 주인이 나의 열쇠를 막고 있다고 생각했다. .ssh/config 파일에 추가했습니다. 현재 작동 중입니다. :) 감사합니다. –

+0

@ user2961873이 경우에는 'denied : public key' (또는 비슷한 것)가 표시되어 인증에 실패했음을 알 수 있습니다. – mkobit

1

내 작업을 표시하기 만하면됩니다. mkobits advice에서 sh 명령에 두 줄을 추가하여 문제를 해결하는 ssh config 파일을 작성했습니다.

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 
      """) 
     } 

도커 파일에 내장 될 수도 있지만 공유 이미지를 사용함에 따라이 목적에 적합합니다.

편집 : 파일을 루트로 작업 공간에 남아되지 않도록

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

비 루트 사용자를 추가합니다 그래서 여기에 우리가 할 dockerfile에 추가했습니다. chown as를 실행해야하며 추가 된 파일은 root로 소유자로 추가됩니다. 추가되는 구성 파일은 다음과 같습니다.

Host * 
    StrictHostKeyChecking no 

건배!

관련 문제