자식 복제-자격 증명을 요구하는 대신 실패


14

자동화 된 도구-웹 프런트 엔드, CI 시스템에서 git 저장소를 복제 할 때 때때로 git clone 호출은 사용자 이름과 비밀번호를 묻는 프롬프트를 표시합니다 (예 : 존재하지 않는 Github 저장소를 복제하거나 ssh 키가없는 새 노드에서) ).

서버 프로세스가 사용자 이름과 암호를 제공하기를 기다리는 대신 git을 실패하게 만드는 방법 (예를 들어 적절한 오류 메시지 및 종료 코드가있는)은 어떻게합니까?


우리는 다중 서버 Jenkins가 설정되어 있는데, ssh 키가없는 새로운 서버에서 실행될 때 죽을 때까지 프롬프트를 기다리는 것이 성가시다-단순히 메시지와 함께 실패하고 종료 코드가 0이 아닌 것을 구성하는 방법 유용한.
Danny Staple

캐치 모든 "일괄 처리"모드를 사용하여 호스트 키를 묻는 메시지를 표시하지 않을 수 있다면이 방법이 이상적입니다.
Danny Staple

- 둘을 조각하려고 - 이들은 모두 관련되어 serverfault.com/questions/61915/...을 , stackoverflow.com/questions/7772190/...을 .
Danny Staple

답변:


15

git 버전 2.3에는 환경 변수가 있습니다. 환경 변수 는 자격 증명을 요구하지 않도록 GIT_TERMINAL_PROMPT설정됩니다 0.

man git(git 버전으로 업데이트 한 후 2.3) 또는 github의이 블로그 게시물에서 자세한 정보를 얻을 수 있습니다 .

예 :

  • git clone https://github.com/some/non-existing-repo 사용자 이름 및 비밀번호를 묻습니다
  • GIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo 사용자 이름 및 비밀번호를 묻지 않고 실패합니다

git 1.8을 사용하는 el7 서버에서 https git clone을 사용하여 다시 돌아 오는 것은 실망 스럽습니다. 다른 저장소에서 2.0으로 업데이트하는 것이 옵션인지 확인하십시오.
Danny Staple

0

ssh 인증을 사용 중이고 Linux에서 ssh 명령 대체를 작성하여이를 사용 불가능하게 할 수 있습니다.

다음을 사용하여 "sshnoprompt.sh"라는 파일을 작성하십시오.

ssh -oBatchMode=yes $@

이 파일을 실행 파일로 만드십시오 chmod +x sshnoprompt.sh

그런 다음 git을 시작할 때 :

GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo

또한 대화 형 git 프롬프트 나 질문을 허용하지 않습니다. 사용자에게 아무것도 묻지 않아야합니다.


0

자식 버전 1.8.3.1에서 작업;

git clone -c core.askPass $echo url/or/path/to/git/repo

core.askPass자격 증명 처리 제어를 위에서 언급 한 프로그램으로 전달하면 구성이 작동합니다. 그러나 $echo출력 이외의 작업을 수행 할 수 없으므로 복제 시도가 즉시 실패하고 각 bash 리디렉션이 적용됩니다. 이 코드는 git 리포지토리가 비공개 인 경우에만 호출되며 특정 리포지토리에 대한 인증이 실패했다는 오류 출력을 파이프합니다. https://github.com/git/git알고있는 개인 저장소에 대해 공용 저장소에서 이를 테스트 할 수 있습니다 .

거래를 단화시키기 위해 echo처음부터 같은 프로그램을 참조 할 필요조차 없습니다 . -c core.askPass코드가 자격 증명 처리를 오프로드하는 프로그램을 알지 못하므로 리포지토리가 비공개 인 경우에도 git 구성 을 전달 하지 않고 계속해서 git 구성 을 실패하게됩니다. 이것은 여기에 언급 된 다른 방법보다 더 오래되고 간단한 방법이지만 이전 버전의 git에서 동일한 효과가 있는지는 알 수 없습니다.


당신은 매우 잘못하면서 다소 정확합니다. 우선, 귀하의 경우 $echo변수 참조는 (설정되지 않음) 빈 문자열로 확장되므로 완전히 의미가 없습니다. echo거기에 달러 기호 를 넣지 않으면 저장소 위치로 해석되므로 올바르지 않습니다. 이어야 -c core.askPass=echo합니다.
Michał Górny

-1

git을 실행하는 방법에 따라 stdin 또는 stdout을 터미널에 연결되지 않도록 리디렉션하면 git에서 세부 정보를 묻는 메시지가 표시되지 않고 오류가 발생합니다.

또한 웹 서비스에 오류 (또는 최소한 로그)를 표시 할 수 있습니다.


이 작업을 정확히 어떻게 수행합니까? 첫째 배쉬에서 이러한 목표를 달성하려고 노력하는 모두 </dev/nullnohup .. &작동하지 않습니다.
Tin Tvrtković

이 답변은 구체적인 예제가 없으면 도움이되지 않습니다. 특히 위에서 언급 한 것처럼 '명확한'방법이 작동하지 않습니다.
Michał Górny

@ MichałGórny 몇 년 전 OPs 질문을 보지 못했지만 그 질문에 대답 할 수있는 충분한 정보 (OS, Toolset)가 없었습니다. stdin 및 stdout을 리디렉션합니다. 문제는 질문을 받았다부터 힘내 많이 변경되었습니다 상단의 대답에 나와있는 환경 변수를 사용하여 떨어져 당신이 더 낫다 그래서 (당신이 푸른 개발 운영팀에 연결하는 경우, 예를 들어 Windows에서, 그것은 자격 증명을 외부 대화 상자를 팝업)
마태 복음 첨탑
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.