"git clone git@remote.git"를 실행할 때 사용자 이름과 비밀번호를 어떻게 제공합니까?


845

다음과 같이 HTTPS 요청에 사용자 이름과 비밀번호를 제공하는 방법을 알고 있습니다.

git clone https://username:password@remote

그러나 다음과 같이 원격에 사용자 이름과 비밀번호를 제공하는 방법을 알고 싶습니다.

git clone git@remote.git

나는 이렇게 시도했다 :

git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password

그러나 그들은 효과가 없었습니다.


4
당신은 할 수 없습니다. "@"앞의 "git"은 이미 사용자 이름입니다. 리포지토리 URL (git@remote.get)은 어디서 얻었습니까? 다른 사용자 이름과 비밀번호를 제공해야한다는 아이디어를 어디서 얻었습니까?
Ken Thomases

3
내 repos URL은 heroku "git@heroku.com : zxy-helloworld.git"에서 가져온 것입니다. 그리고 emacs shell을 사용하여 복제하고 푸시합니다. 쉘이 암호를 요청하면 emacs가 정지됩니다. 이것은 Windows에서 emacs의 알려진 문제입니다 : gnu.org/software/emacs/windows/…
좌표를

사용자 이름이 이메일 인 경우 어떻게합니까? 어떻게 입력합니까? myemail @ gmail.com @ example.com ?
Kyon Perez

답변:


1317

Michael Scharf의 의견을 바탕으로 :

Bash 히스토리 파일에 로그인되지 않도록 비밀번호를 남겨 둘 수 있습니다.

git clone https://username@github.com/username/repository.git

암호를 묻는 메시지가 나타납니다.

또는 다음을 사용할 수 있습니다.

git clone https://username:password@github.com/username/repository.git

이 방법은 GitHub 저장소에서 효과적이었습니다.


5
그건 그렇고 똑같을 필요는 없습니다. 동료가 git repo를 작성했고 다른 계정으로 로그인 한 경우에는 동일하지 않습니다.
holgac

48
이 파일의 URL에 비밀번호를 입력하는 것은 바람직하지 않습니다. .git / config에 저장됩니다. 안전하지 않습니다. ssh 키를 사용하는 것이 좋습니다
zetanova

55
@MrDuk 문제 없음, 이스케이프 처리 (% 40 iirc).
Benjamin Gruenbaum

57
비밀번호를 남겨 둘 수 있습니다 : git clone https://username@github.com/username/repository.git. 자식 당신을 물어볼 것입니다 그것은 .git / 설정에 나 배시 기록에 저장되지 않습니다
Michael_Scharf

36
줄의 시작 부분에 'space'를 입력하여 리눅스가 역사에 명령을 저장하지 않도록 할 수 있습니다
Nicolas Zozol

212

user@host:path/to/repo형식은 Git에게 ssh를 사용 host하여 username 으로 로그인하도록 지시 user합니다. 보낸 사람 git help clone:

ssh 프로토콜과 함께 대체 scp 유사 구문을 사용할 수도 있습니다.

[user@]host.xz:path/to/repo.git/

앞에있는 부분 @은 사용자 이름이며 인증 방법 (암호, 공개 키 등)은 Git이 아닌 ssh에 의해 결정됩니다. ssh는 원격 서버의 구성에 따라 비밀번호를 사용하지 않을 수도 있기 때문에 Git은 비밀번호를 ssh에 전달할 수 없습니다.

ssh-agent항상 암호를 입력하지 않도록 사용

항상 ssh 비밀번호를 입력하지 않으려는 경우 일반적인 해결책은 공개 / 개인 키 쌍생성 하고 공개 키를 ~/.ssh/authorized_keys파일 에 원격 서버에 넣고 개인 키를에로드하는 것 ssh-agent입니다. 또한 한 번 로그인하도록 SSH를 통한 Git 구성 , ssh 키 비밀번호 문구 , gitolite의 ssh 문서Heroku의 ssh 키 문서 에 대한 GitHub의 도움말 페이지를 참조하십시오 .

GitHub (또는 Heroku 또는 ...)에서 여러 계정 중에서 선택

GitHub 또는 Heroku와 같은 장소에 여러 계정이있는 경우 여러 개의 ssh 키가 있습니다 (계정 당 하나 이상). 로그인하려는 계정을 선택하려면 ssh에게 사용할 개인 키를 알려야합니다 .

예를 들어, 두 개의 GitHub의 계정을 있다고 가정 foo하고 bar. 에 대한 ssh 키 foo~/.ssh/foo_github_id이고에 대한 ssh 키는 bar입니다 ~/.ssh/bar_github_id. 당신은 액세스하려는 git@github.com:foo/foo.git사용자와 foo계정과 git@github.com:bar/bar.git사용자와 bar계정. 당신은 다음을 추가 할 것입니다 ~/.ssh/config:

Host gh-foo
    Hostname github.com
    User git
    IdentityFile ~/.ssh/foo_github_id
Host gh-bar
    Hostname github.com
    User git
    IdentityFile ~/.ssh/bar_github_id

그런 다음 두 저장소를 다음과 같이 복제합니다.

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

ssh 피하기

일부 서비스는 ssh의 대안으로 HTTP 액세스를 제공합니다.

  • GitHub :

    https://username:password@github.com/username/repository.git
    
  • 기분 좋은 :

    https://username:password@gitorious.org/project/repository.git
    
  • Heroku : 이 지원 기사를 참조하십시오 .

경고 : 복제 URL에 비밀번호를 추가하면 Git이 일반 텍스트 비밀번호를에 저장합니다 .git/config. HTTP를 사용할 때 비밀번호를 안전하게 저장하려면 자격 증명 도우미를 사용하십시오. 예를 들면 다음과 같습니다.

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

위의 내용으로 인해 Git은 15 분마다 한 번씩 비밀번호를 묻습니다 (기본). 자세한 내용 git help credentials을 참조하십시오.


이것은 git이 SSH와 어떻게 작동하는지에 대한 가장 좋은 설명입니다. 내 이해는 git@githost.com : path / to / repo.git을 지정하면 효과적으로 git에게 사용자가 git 자신이며 ssh-agent에서 자격 증명 (공개 키)을 가져와야한다는 것을 효과적으로 알 수 있습니다. 호스트 "githost.com".
Anael

39

@Bassetassen의 답변에 대한 의견에서 @plosco git clone https://<token>@github.com/username/repository.git는 최소한 GitHub에서 복제 하는 데 사용할 수 있다고 언급했습니다 . 복제를 자동화하려고 할 때와 같이 누군가 가이 답변을 발견 할 경우를 대비하여 방법을 확장 할 것이라고 생각했습니다.

GitHub는 이 작업을 수행하는 방법에 대한 매우 유용한 가이드를 제공하지만 자동화 목적으로 한 줄에 모두 포함하려는 경우 수행 할 작업은 다루지 않습니다. 클론 URL에 토큰을 추가하면에 일반 텍스트로 토큰이 저장된다고 경고합니다 .git/config. 이것은 거의 모든 유스 케이스에 대한 보안 위험이지만 분명히 리포지토리를 삭제하고 완료되면 토큰을 취소 할 계획이므로 신경 쓰지 않습니다.

1. 토큰 생성

GitHub에는 토큰을 얻는 방법에 대한 전체 가이드가 있지만 여기에는 TL; DR이 있습니다.

  1. 설정> 개발자 설정> 개인용 액세스 토큰으로 이동 하십시오 ( 직접 링크가 있습니다 ).
  2. "새 토큰 생성"을 클릭하고 비밀번호를 다시 입력하십시오. (h 는 또 다른 직접 링크입니다 )
  3. 설명 / 이름을 설정하고 "리포지토리"권한을 확인한 다음 페이지 하단의 "토큰 생성"버튼을 누르십시오.
  4. 페이지를 떠나기 전에 새 토큰을 복사 하십시오

2. 레포 복제

명령 @plosco 준 동일로, git clone https://<token>@github.com/<username>/<repository>.git단지 대체 <token>, <username>그리고 <repository>무엇 이건 당신의 정보입니다.

폴더를 특정 폴더에 복제하려면 다음과 같이 끝에 폴더 주소를 삽입하십시오. git clone https://<token>@github.com/<username>/<repository.git> <folder>, 어디 <folder>에서 폴더를 복제 할지를 추측했습니다! 당신은 물론 사용할 수 있습니다 ., .., ~다른 곳에서 할 수처럼 여기, 등.

3. 흔적을 남기지 마십시오

당신이하는 일이 얼마나 민감한 지에 따라이 모든 것이 필요한 것은 아닙니다.

  • 일정 시간 동안 사용하지 않으려는 경우 해당 토큰을 그대로두고 싶지 않을 수 있으므로 토큰 페이지 로 돌아가서 옆에있는 삭제 버튼을 누르십시오.
  • repo가 ​​다시 필요하지 않으면 삭제하십시오 rm -rf <folder>.
  • 저장소가 다시 필요하지만 다시 자동화 할 필요가없는 경우을 git remote remove origin실행하여 토큰을 제거하거나 원격으로 제거 할 수 있습니다 git remote set-url origin https://github.com/<username>/<repository.git>.
  • bash 기록을 지우면 토큰이 거기에 기록되지 않습니다. 이이 작업을 수행하는 방법에는 여러 가지가 있습니다 볼 이 질문이 질문에 . 그러나 처음에 저장되지 않도록 위의 모든 명령 앞에 공백을 추가하는 것이 더 쉬울 수 있습니다.

나는 프로가 아니므로 위의 내용은 어떤 종류의 법의학 작업에도 흔적이 남지 않을 것이라는 점에서 안전하지 않을 수 있습니다.


1
https://<token>@github.com내 포털로 받아 들여지지 않았다, 나는 사용했다https://oauth2:<token>@github.com
MushyPeas

25

많은 답변이 있지만 사용자 이름이나 비밀번호에 특수 문자가 있으면 반복되는 문제에 직면하게됩니다.

git 용 사용자 이름과 비밀번호를 URL 인코딩 한 다음 URL 자체의 일부로 사용하십시오 (보안 문제가 없을 때).

사용자 이름의 URL 인코딩 값

'user + 1'은 user % 2B1입니다.

URL 인코딩 된 비밀번호 값

'Welcome @ 1234'는 Welcome % 401234입니다.

그러면 GIT 복제 URL은 다음과 같습니다.

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo 완벽하게 작동하지만

git clone https : // user + 1 : Welcome @ 1234 @ actual-git-url-for-the-repo 는 403 오류를 제공합니다

도움이 되었기를 바랍니다.

만약을 위해, 온라인으로 URL 인코딩을 원한다면 : https://www.urlencoder.org/


13

다음과 같은 방법으로이 문제를 해결했습니다.

여기에 이미지 설명을 입력하십시오


11
명령 행에 비밀번호를 입력하지 않는 것이 좋습니다. 시스템이 명령 행 히스토리를 파일에 저장할 수 있다는 것을 알고 있습니까? (예 리눅스는 숨겨진 파일 이름 .bash_history 파일이 있음)
아우

옳은. 이 작업이나 이와 비슷한 작업을 수행 할 때마다 매우 편리 할 수 ​​있기 때문에 항상 사용 내역에서 명령을 삭제합니다 (history -d).
Francesco Marchetti-Stasi

4
@ FrancescoMarchetti-Stasi 명령을 삭제할 필요가 없으며 명령 시작 부분에 공백을 사용하면 기록에 저장되지 않습니다.
Ishtiyaq Husain

예-유닉스 시스템에서 거의 30 년이 지난 후 몇 달 전에 배웠습니다. 부끄러움 :)
Francesco Marchetti-Stasi

9

Windows 에서 다음 단계를 수행하면 GitHub 로그인 창이 다시 트리거됩니다 git clone.

  • "Credential Manager"에 대한 검색 시작 메뉴
  • "Windows 자격 증명"을 선택하십시오.
  • Git 또는 GitHub와 관련된 자격 증명을 삭제하십시오.

결과



5
git config --global core.askpass

동일한 방법으로 복제하기 전에 이것을 먼저 실행하십시오.


3
그것을 시도했지만 여전히 요구하지 않습니다.
Maarten Kieft

설정 글로벌 구성하는 것은 혼란 다른 복제까지 할 수 있었던 좋은 아이디어 적이 없다.
마틴

1

이것은 탁월한 스택 오버플로 질문이며 답변은 매우 유익하여 최근에 발생한 성가신 문제를 해결할 수있었습니다.

내가 일하는 조직은 Atlassian's BitBucket기본적으로 리포지토리를 완벽하게 보호 할 수 있도록 제품 (Github 아님), 기본적으로 GitHub 버전을 사용합니다. 내가 체크 아웃 한 새로운 저장소에 암호가 필요하다는 점에서 @coordinate와 비슷한 문제가 발생했습니다. 자격 증명이 모든 BitBucket프로젝트에 대해 전 세계적으로 저장되었으므로 자격 증명이 손실 된 이유를 잘 모르겠습니다.

즉, 다음 GIT 명령 ( 사용자 이름 제공)을 입력하면 Git의 자격 증명 관리자가 암호를 입력하라는 메시지를 표시 한 다음 저장할 수있었습니다.

git clone https://user@code.domain.org/git/[organization]/[team]/[repository.git]

참고 : 괄호로 묶은 디렉토리 하위 경로는 단순히 내부 참조를 나타내며 사용자에 따라 다릅니다.


0

사용 중이고 사용자 입력이나 사용자 프롬프트없이 (예 : CI / CD 파이프 라인 내부에서) 프로세스 http/https완전히 자동화 하려는 경우 다음 방법을 활용할 수 있습니다.git credential.helper

GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used

git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}

여기서 ALICE_GITHUB_PASSWORD이전 쉘 명령 또는 파이프 라인 구성 등에서 환경 변수 를 설정하도록 선택할 수 있습니다 .

"store"기반 git-credential-helper는 비밀번호와 값을 일반 텍스트로 저장합니다. 따라서 토큰 / 암호에 매우 제한된 권한이 있는지 확인하십시오.


이제 단순히 사용 은 https : //alice@github.com/my_repo.git 자동화 시스템이 필요 곳은 REPO를 가져 -이 자격 증명을 사용 alicegithub.com자식-자격 헬퍼로 저장한다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.