나는 git push
원격 Git 저장소에 내 작품.
모든는 push
입력에 저를 묻는 메시지가 표시됩니다 username
및 password
. 푸시 할 때마다 피하고 싶지만 피하지 않도록 구성하는 방법은 무엇입니까?
나는 git push
원격 Git 저장소에 내 작품.
모든는 push
입력에 저를 묻는 메시지가 표시됩니다 username
및 password
. 푸시 할 때마다 피하고 싶지만 피하지 않도록 구성하는 방법은 무엇입니까?
답변:
터미널을 열어 ssh 키를 작성하십시오.
cd ~ #Your home directory
ssh-keygen -t rsa #Press enter for all values
(커밋 프로그램이 인증서 / 개인 및 공개 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
위의 단계를 수행 한 후에도 여전히 비밀번호 프롬프트가 표시되면 리포 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 의 답변을 포함합니다.
git remote set-url origin git@github.com:/username/projectname.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 시간) 동안 캐시됩니다 .
참고 : 자격 증명 도우미는 암호화되지 않은 암호를 로컬 디스크에 저장합니다.
git
맨 : "암호가 파일 시스템 권한에 의해서만 보호, 디스크에 암호화되지 않은 저장합니다이 도우미를 사용하여."
store
암호화되지 않은 디스크에 암호를 저장하는 자격 증명 도우미 에 대한 경고가 없습니다 .
git config --unset credential.helper
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 웹 사이트의 새 저장소에서 리모컨을 추가 한 후 푸시하려고했습니다.
git@github.com/username/reponame.git
--repo
git push 명령 에는 옵션을 사용하십시오 . 이처럼 :
$ git push --repo https://name:password@bitbucket.org/name/repo.git
git remote set-url origin https://name:password@github.com/repo.git
name@github.com/....git
매번 암호에 대해 신경 쓰지 않아도되는 경우 URL을 그냥 작동 하도록 설정하는 것이 좋습니다.
git push --repo https://github.com/Username/repo
경우 .git
확장명 없이 작동 합니다
당신이 사용할 수있는 자식-자격 증명 매장을 통해
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'
- 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 에서 찾을 수 있습니다 . [중점 광산]
credential.helper cache
작동하지 않습니다. 이어야합니다 git config --global credential.helper wincred
.
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
그게 다야.
git 클라이언트를 OS 자격 증명 저장소에 연결하십시오. 예를 들어 Windows에서는 자격 증명 도우미를 wincred에 바인딩합니다.
git config --global credential.helper wincred
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
내가 아는 한, 두 가지 안전한 방법이 있습니다 : ssh 또는 passwd 키 저장소를 사용하여 암호화 .
cat ~/.ssh/id_rsa.pub
, 이름과 저장 (당신이 그런 파일이없는 경우에 의해 자신을 위해 하나의 생성, 거기에 붙여 ssh-keygen -t rsa
- 방금 입력 한 모든 프롬프트에를);git remote set-url origin git+ssh://git@github.com/username/reponame.git
-먼저 확인하여 git remote -v
);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
있습니다.
Windows에서 내 솔루션 :
ssh-keygen -t rsa
(모든 값을 입력하려면 Enter 키를 누르십시오)Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
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
... 를 사용하지 않으려는 경우 ...)
경고 : 다음과 같은 이유로 본질적으로 안전하지 않습니다.
ISP 또는 네트워크 액세스를 기록하는 사람은 URL에서 일반 텍스트로 비밀번호를 쉽게 볼 수 있습니다.
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 서버의 일부로 @ 다음에 암호를 생각하는 명령을 깨고 있습니까?
이 모든 것은 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}
그런 다음 다음 섹션에서와 같이 비밀번호 저장소를 제거하십시오.
퍼깅
자, 이것은 사라 졌을 것입니다.
애플리케이션이 Java를 사용하여 이러한 명령을 실행하는 경우 런타임 대신 ProcessBuilder를 사용하십시오. 런타임을 사용해야하는 경우 단일 문자열을 인수로 사용하는 것이 아니라 / bin / bash 및 -c를 인수로 사용하여 문자열 배열을 인수로 사용하는 getRunTime (). exec를 사용하십시오.
GIT FETCH / PULL / PUSH