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


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/null와 nohup .. &작동하지 않습니다.
— Tin Tvrtković

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

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