모든 자식 푸시에서 사용자 이름과 비밀번호를 지정하지 않으려면 어떻게합니까?


317

나는 git push원격 Git 저장소에 내 작품.

모든는 push입력에 저를 묻는 메시지가 표시됩니다 usernamepassword. 푸시 할 때마다 피하고 싶지만 피하지 않도록 구성하는 방법은 무엇입니까?


6
답은 여기에 있습니다 : stackoverflow.com/questions/6565357/...
kbdjockey

3
간단히 말해 : github의 경우 다음 두 링크를 따르십시오. help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
JRun

비트 버킷의 경우이 링크
JDP

답변:


346

1. SSH 키 생성

리눅스 / 맥

터미널을 열어 ssh 키를 작성하십시오.

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

Windows의 경우

(커밋 프로그램이 인증서 / 개인 및 공개 ssh 키를 사용할 수있는 경우에만 작동)

  1. Putty Gen을 사용하여 키 생성
  2. 키를 열린 SSH 키로 내보내기

위의 단계에 대한 퍼티 세대에 대한 연습 이 있습니다.

2. SSH 키를 원격 저장소와 연관 시키십시오.

이 단계는 리모컨 설정 방법에 따라 다릅니다.

  • GitHub 저장소이고 관리자 권한이있는 경우 설정으로 이동하여 'SSH 키 추가'를 클릭하십시오. ~/.ssh/id_rsa.pub'키'라고 표시된 입력란에 내용을 복사합니다 .

  • 저장소가 다른 사람에 의해 관리되는 경우 관리자에게 id_rsa.pub.

  • 원격 저장소가 사용자에 의해 관리되는 경우 다음 명령을 사용할 수 있습니다.

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3. 원격 URL을 SSH 1 을 지원하는 양식으로 설정하십시오.

위의 단계를 수행 한 후에도 여전히 비밀번호 프롬프트가 표시되면 리포 URL이 양식인지 확인하십시오.

git+ssh://git@github.com/username/reponame.git

반대로

https://github.com/username/reponame.git

repo URL을 보려면 다음을 실행하십시오.

git remote show origin

다음을 사용하여 URL을 변경할 수 있습니다.

git remote set-url origin git+ssh://git@github.com/username/reponame.git

[1]이 섹션은 Eric P 의 답변을 포함합니다.


3
우분투에서 1 단계와 2 단계를 실행했지만 여전히 u_id passwd를 묻습니다. ssh -T git@github.com도 실행했습니다. 여전히 동일합니다. 무엇을해야합니까?
Radhika

4
@Rads Eric P 의 다른 답변을 시도해 보셨습니까 ?
yo '

2
@dialex 그는 원격 자식 저장소를 관리하는 사람을 의미했다.
selalerer

5
git remote set-url origin git + ssh : //git@github.com/username/reponame.git이 명령은 저에게 도움이됩니다.
ArtificiallyIntelligence

2
이것은 나를 위해 일했다git remote set-url origin git@github.com:/username/projectname.git
Kurt

181

Git 리포지토리로 영구적으로 인증

신임 캐싱을 사용하려면 다음 명령을 실행하십시오.

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

캐싱 expire를 지정해야합니다 .

git config --global credential.helper 'cache --timeout 7200'

자격 증명 캐싱을 활성화하면 7200 초 (2 시간) 동안 캐시됩니다 .

참고 : 자격 증명 도우미는 암호화되지 않은 암호를 로컬 디스크에 저장합니다.


4
감사. config 명령의 기능을 설명해 주시겠습니까? 처음으로 리포지토리로 암호를 입력하지 않아도 왜 암호를 요구하지 않는지 궁금합니다.
HelloWorldNoMore

1
@vivoconunxino 아마도 안전하지 않기 때문일 것입니다. 로부터 git맨 : "암호가 파일 시스템 권한에 의해서만 보호, 디스크에 암호화되지 않은 저장합니다이 도우미를 사용하여."
cmaster-monica reinstate

15
이 답변에는 store암호화되지 않은 디스크에 암호를 저장하는 자격 증명 도우미 에 대한 경고가 없습니다 .
cmaster-monica reinstate

1
@DavidRTribble : 캐시로 설정 하시겠습니까? 또는 관련 파일을 제거하려면 git-scm.com/docs/git-credential-store
serv-inc를

1
@DavidRTribble : 더 나은 :git config --unset credential.helper
serv-inc

116

SSH 키가 이미 설정되어 있고 여전히 비밀번호 프롬프트가 표시되는 경우 리포지토리 URL이 양식인지 확인하십시오.

git+ssh://git@github.com/username/reponame.git

반대로

https://github.com/username/reponame.git

repo URL을 보려면 다음을 실행하십시오.

git remote show origin

다음과 git remote set-url같이 URL을 변경할 수 있습니다 .

git remote set-url origin git+ssh://git@github.com/username/reponame.git

이것은 git init로컬에서 사용한 후에 문제를 해결 한 다음 GitHub 웹 사이트의 새 저장소에서 리모컨을 추가 한 후 푸시하려고했습니다.
sheldonkreger

1
이것이 왜 대답의 일부가 아닌지 잘 모르겠습니다. 감사!
jwalk

1
허용 된 답변은 실제 허용되는 답변과이 답변으로 구성되어야합니다.
Puce

3
"git + ssh : //"를 생략하고 바로 사용할 수 있습니다git@github.com/username/reponame.git
Ivan Shulev

1
@IvanShulev 처음에는 git + ssh없이 시도했지만 작동하지 않았습니다.
Antonello

40

--repogit push 명령 에는 옵션을 사용하십시오 . 이처럼 :

$ git push --repo https://name:password@bitbucket.org/name/repo.git

37
또는 기본적으로git remote set-url origin https://name:password@github.com/repo.git
ACyclic

name@github.com/....git매번 암호에 대해 신경 쓰지 않아도되는 경우 URL을 그냥 작동 하도록 설정하는 것이 좋습니다.
timday

github 사용자의 git push --repo https://github.com/Username/repo 경우 .git 확장명 없이 작동 합니다
Pe Dro

24

무기한 저장

당신이 사용할 수있는 자식-자격 증명 매장을 통해

git config credential.helper store

파일 시스템에 암호화되지 않은 비밀번호저장합니다 .

이 도우미를 사용하면 암호가 디스크에 암호화되지 않고 파일 시스템 권한으로 만 보호됩니다. 이것이 허용 가능한 보안 상충 관계가 아닌 경우 git-credential-cache를 시도하거나 운영 체제에서 제공하는 보안 저장소와 통합되는 도우미를 찾으십시오.

타임 아웃

기본적으로 15 분 동안 비밀번호를 저장 하는 git-credential-cache 를 사용하십시오 .

git config credential.helper cache

다른 시간 초과를 설정하려면 --timeout(여기서 5 분)을 사용 하십시오

git config credential.helper 'cache --timeout=300'

무기한 보안 저장 (OS X 및 Windows)

  • Mac을 사용하는 경우 Git에는 "osxkeychain"모드 가 제공되어 시스템 계정에 연결된 보안 키 체인의 자격 증명을 캐시합니다. 이 방법은 디스크에 자격 증명을 저장하지만 만료되지는 않지만 HTTPS 인증서와 Safari 자동 채우기를 저장하는 동일한 시스템으로 암호화됩니다. 명령 행에서 다음을 실행하면이 기능이 활성화됩니다 git config --global credential.helper osxkeychain. 키 체인 앱을 사용하여 키 체인에 자격 증명을 저장해야합니다.
  • Windows를 사용하는 경우 "Git Credential Manager for Windows"라는 도우미를 설치할 수 있습니다 . 이것은 위에서 설명한“osxkeychain”도우미와 비슷하지만 Windows 자격 증명 저장소를 사용하여 중요한 정보를 제어합니다. https://github.com/Microsoft/Git-Credential-Manager-for-Windows 에서 찾을 수 있습니다 . [중점 광산]

Windows의 경우 credential.helper cache작동하지 않습니다. 이어야합니다 git config --global credential.helper wincred.
Paulo Merson

1
https를 사용해야 할 때 유용합니다. ssh를 사용하면 서버의 git이 중단되므로 SSH 키 옵션이 없습니다.
Sridhar Sarnobat

8

https://github.com/org/repo.gitssh 링크 대신 https 링크 ( )를 사용하고있었습니다 .

git@github.com:org/repo.git  

전환하면 문제가 해결되었습니다!


6

1 단계 -

아래 명령을 사용하여 Linux 시스템에서 SSH 키를 작성하십시오.

ssh-keygen -t rsa -b 4096 -C "your_email"

암호와 파일 이름을 요구합니다 (기본값은 ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub).

2 단계 -

파일이 생성되면 공개 키 id_rsa.pub를 github 계정 ssh 섹션에 추가하십시오.

3 단계-

컴퓨터에서 아래 명령을 사용하여 개인 키 id_rsa를 ssh-agent에 추가하십시오.

ssh-add ~/.ssh/id_rsa 

4 단계-

이제 아래 명령을 사용하여 원격 URL git@github.com : user_name / repo_name.git을 로컬 git repo에 추가하십시오.

git remote remove origin
git remote add origin git@github.com:user_name/repo_name.git

그게 다야.



5

Windows 운영 체제에서는 이것을 대신 사용하십시오.

https://{Username}:{Password}@github.com/{Username}/{repo}.git

예 :

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git push origin master

5

위의 솔루션에 대해 몇 번 지적하고 싶었습니다.

git config credential.helper store

이 후에 암호가 필요한 모든 명령을 사용할 수 있습니다. 밀지 않아도됩니다. (예를 들어 뽑을 수도 있습니다) 그 후에는 사용자 이름 / 암호를 다시 입력 할 필요가 없습니다.


3

나는 Pavel이 제안한 대답을 사용했고 그것은 나를 위해 일했다. 리모컨을 다음과 같이 추가하는 동안 차이점이 있습니다.git remote add (alias) https://(name:password)@github.com/(the remote address).git


3

아래 명령을 실행하면 문제가 해결되었습니다.

git config --global credential.helper wincred

아래의 github 설명서를 참조하십시오 :

https://help.github.com/articles/caching-your-github-password-in-git/

3

내가 아는 한, 두 가지 안전한 방법이 있습니다 : ssh 또는 passwd 키 저장소를 사용하여 암호화 .

SSH

  1. github에 로그인하십시오;
  2. 방문 : https://github.com/settings/keys ;
  3. 새로운 SSH 키;
  4. cat ~/.ssh/id_rsa.pub, 이름과 저장 (당신이 그런 파일이없는 경우에 의해 자신을 위해 하나의 생성, 거기에 붙여 ssh-keygen -t rsa- 방금 입력 한 모든 프롬프트에를);
  5. 로컬 리포지토리로 이동하여 리모컨을 업데이트하십시오 git remote set-url origin git+ssh://git@github.com/username/reponame.git-먼저 확인하여 git remote -v);
  6. 여기 touch t; git add t; git commit -m "test"; git push비밀번호없이 세상 을 즐기기 위해 예를 확인하십시오 .

키 저장소를 사용하여 암호를 암호화

git config --global credential.helper store다른 사람들이 언급 한대로 사용하면 암호화되지 않은 암호는 평범한 텍스트로 저장되어 ~/.git-credentials안전하지 않습니다.

시도 암호화

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

git config --global credential.helper store

이 경우을 사용하고 https://git@github.com/username/reponame.git있습니다.


2

Windows에서 내 솔루션 :

  1. 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 "Git Bash Here"를 선택하십시오.
  2. ssh-keygen -t rsa (모든 값을 입력하려면 Enter 키를 누르십시오)
  3. 터미널에서 다음을 확인하십시오. Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. 지정된 파일에서 공개 키를 복사하십시오.
  5. GitHub 프로파일로 이동하십시오 => 설정 => SSH 및 GPG 키 => 새 SSH 키 => SSH 키 붙여 넣기 => 저장

2

PC가 안전하거나 암호 보안에 신경 쓰지 않으면 매우 간단하게 얻을 수 있습니다. 원격 저장소가 GitHub에 있고 원격 저장소 origin의 로컬 이름 이라고 가정하면 이 명령을 사용하십시오.

git remote set-url --push origin https://<username>:<password>@github.com/<repo>

--push플래그는 이것이의 저장소의 URL을 변경 보장 git push유일한 명령. (원래 게시물에서 묻는 질문은 git push명령에만 해당됩니다. 푸시 작업에만 사용자 이름 + 암호가 필요한 것은 GitHub의 공용 저장소에 대한 일반적인 설정입니다 . GitHub의 개인 저장소에는 끌어 오기 및 가져 오기 작업에도 사용자 이름 + 암호가 필요합니다. 개인 저장소의 경우 --push flag... 를 사용하지 않으려는 경우 ...)

경고 : 다음과 같은 이유로 본질적으로 안전하지 않습니다.

  1. ISP 또는 네트워크 액세스를 기록하는 사람은 URL에서 일반 텍스트로 비밀번호를 쉽게 볼 수 있습니다.

  2. PC에 액세스 할 수있는 사람은 누구나을 사용하여 비밀번호를 볼 수 있습니다 git remote show origin.

그렇기 때문에 SSH 키를 사용하는 것이 정답입니다.

SSH 키조차 완전히 안전하지는 않습니다 . 예를 들어 PC에 액세스 할 수있는 사람은 여전히 ​​푸시를 만들어 저장소를 손상 시키거나 푸시 커밋으로 코드를 미세하게 변경할 수 있습니다. (푸쉬 된 모든 커밋은 GitHub에서 명백히 눈에 잘 띄지 만, 누군가가 코드를 비밀리에 변경하고 싶다면 --amend커밋 메시지를 변경하지 않고 이전 커밋을 강제로 푸시 한 다음 강제로 푸시 할 수 있습니다. )

그러나 비밀번호를 공개하는 것이 더 나쁩니다 . 공격자가 사용자 이름과 비밀번호를 알고 있다면 자신의 계정에서 사용자를 잠 그거나 계정을 삭제하거나 저장소를 영구적으로 삭제하는 등의 작업을 수행 할 수 있습니다.


또는 단순성 보안 을 위해 URL에 사용자 이름 만 제공 할 수 있으므로 매번 비밀번호를 입력해야 git push하지만 매번 사용자 이름을 제공 할 필요는 없습니다. (이 접근 방식이 마음에 들었습니다. 비밀번호를 입력해야 할 때마다 생각할 수있는 일시 중지 가 발생 git push하므로 git push실수로 할 수 없습니다 .)

git remote set-url --push origin https://<username>@github.com/<repo>

암호가 있다면 @git 서버의 일부로 @ 다음에 암호를 생각하는 명령을 깨고 있습니까?
Pranav Singh

비밀번호에 '@'이 포함되어 있다면 여기에있는 것입니다. 죄송합니다. 비밀번호를 변경할 수 있습니까?
radfast

서비스 계정 (개인이 아님)이있는 Continuous Integration의 자동화를 수행하면서 비밀번호 변경 요청을 제기해야합니다. 보안 로그인을 위해 SSH 키를 사용했습니다
Pranav Singh

1

이 모든 것은 git이 clone / pull / push / fetch 명령에서 파이프를 통해 자격 증명을 보내는 옵션을 제공하지 않기 때문에 발생합니다. credential.helper를 제공하지만 파일 시스템에 저장하거나 데몬 등을 생성합니다. 종종 GIT의 자격 증명은 시스템 수준의 자격 증명이며 git 명령을 호출하는 응용 프로그램에 안전합니다. 실제로 안전하지 않습니다.

여기 내가 해결해야 할 것이 있습니다. 1. 힘내 버전 (git --version)은 1.8.3 이상이어야합니다.

GIT CLONE

복제를 위해 URL을 http : // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}에서 http : // {myuser} : {mypwd} @ {my_repo_ip_address} 형식으로 변경 한 후 "git clone URL"을 사용하십시오. /{myrepo_name.git}

그런 다음 다음 섹션에서와 같이 비밀번호 저장소를 제거하십시오.

퍼깅

자, 이것은 사라 졌을 것입니다.

  1. git remote origin에 암호를 썼습니다. 손상을 보려면 "git remote -v"를 입력하십시오. 비밀번호없이 원격 오리진 URL을 설정하여이를 정정하십시오. "git remote set_url origin http : // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. 저장소의 .git / logs에 비밀번호를 작성했습니다. find .git / logs -exec sed -i 's / {my_url_with_pwd} // g'{} \;와 같은 유닉스 명령을 사용하여 pwd의 모든 인스턴스를 교체하십시오. 여기서 {my_url_with_pwd}는 비밀번호가 포함 된 URL입니다. URL에는 슬래시가 있으므로 두 개의 백 슬래시로 이스케이프해야합니다. 예를 들어, URL http : // kris : passs123@192.168.0.1/proj.git- > http : \\ / \\ / kris : passs123@192.168.0.1 \\ / proj.git

애플리케이션이 Java를 사용하여 이러한 명령을 실행하는 경우 런타임 대신 ProcessBuilder를 사용하십시오. 런타임을 사용해야하는 경우 단일 문자열을 인수로 사용하는 것이 아니라 / bin / bash 및 -c를 인수로 사용하여 문자열 배열을 인수로 사용하는 getRunTime (). exec를 사용하십시오.

GIT FETCH / PULL / PUSH

  1. git remote url에서 password를 "git remote set_url origin http : // {myuser} : {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"로 설정하십시오.
  2. git fetch / push / pull 명령을 실행하십시오. 그러면 비밀번호를 묻는 메시지가 표시되지 않습니다.
  3. 이전 섹션에서와 같이 퍼지를 수행하십시오. 놓치지 마세요.

0

SSH 개인 키를 설정해야합니다.이 페이지를 검토 할 수 있습니다 .Mac에서 설정을 수행하는 방법은 Linux에서 가이드가 거의 동일해야하며 Windows에서는 MSYS 와 같은 도구가 필요합니다 .


0

적어도 Windows에서 TortoiseGIT를 사용할 때 SSH 키를 생성하고 간단히 다음을 사용하여 GIT 서버로 전송할 수 있습니다.

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