내 GitHub 계정에서 내 PC로 Git 리포지토리를 복제했습니다.
내 PC와 노트북 모두에서 작업하고 싶지만 하나의 GitHub 계정으로 작업하고 싶습니다.
내 PC를 사용하여 GitHub에 푸시하거나 풀하려고 하면 사용자 이름과 암호가 필요하지만 랩톱을 사용할 때는 그렇지 않습니다!
origin
과 상호 작용할 때마다 사용자 이름과 비밀번호를 입력하고 싶지 않습니다. 내가 여기서 무엇을 놓치고 있습니까?
질문자 :TooCooL
내 GitHub 계정에서 내 PC로 Git 리포지토리를 복제했습니다.
내 PC와 노트북 모두에서 작업하고 싶지만 하나의 GitHub 계정으로 작업하고 싶습니다.
내 PC를 사용하여 GitHub에 푸시하거나 풀하려고 하면 사용자 이름과 암호가 필요하지만 랩톱을 사용할 때는 그렇지 않습니다!
origin
과 상호 작용할 때마다 사용자 이름과 비밀번호를 입력하고 싶지 않습니다. 내가 여기서 무엇을 놓치고 있습니까?
일반적인 원인은 SSH 대신 기본값(HTTPS)을 사용하여 복제하는 것입니다. 저장소로 이동하여 "복제 또는 다운로드"를 클릭한 다음 URL 필드 위의 "SSH 사용" 버튼을 클릭하고 다음과 같이 원본 원격의 URL을 업데이트하여 이를 수정할 수 있습니다.
git remote set-url origin git@github.com:username/repo.git
다음을 사용하여 원격을 HTTPS 또는 SSH로 추가했는지 확인할 수 있습니다.
git remote -v
이것은 GitHub: HTTPS에서 SSH로 원격 URL 전환에 문서화되어 있습니다.
다음 명령을 실행하여 자격 증명 캐싱 을 활성화합니다.
$ git config credential.helper store $ git push https://github.com/owner/repo.git Username for 'https://github.com': <USERNAME> Password for 'https://USERNAME@github.com': <PASSWORD>
또한 캐싱 만료를 지정해야 합니다.
git config --global credential.helper 'cache --timeout 7200'
자격 증명 캐싱을 활성화하면 7200초(2시간) 동안 캐싱됩니다.
방금 동일한 문제가 발생했으며 내가 찾은 가장 간단한 솔루션은 HTTPS 대신 SSH URL을 사용하는 것입니다.
ssh://git@github.com/username/repo.git
그리고 이것은 아닙니다:
https://github.com/username/repo.git
username
과 password
대신 SSH 키 만으로 유효성을 검사할 수 있습니다.
SSH로 변경하는 것 외에도 암호를 일반 텍스트로 입력하는 것이 마음에 들지 않으면 HTTPS를 계속 사용할 수도 있습니다. ~/.netrc
에 넣으면 사용자 이름/비밀번호를 묻지 않습니다(적어도 Linux 및 Mac에서는).
machine github.com login <user> password <password>
추가 (VonC의 두 번째 주석 참조): Windows에서 파일 이름은 %HOME%\_netrc
입니다.
또한 암호화하려는 경우 VonC의 첫 번째 설명을 읽으십시오.
Git 1.7.10 이상 이 있는 경우 사용할 수 있는 또 다른 추가 사항 (user137717의 주석 참조) .
자격 증명 도우미를 사용하여 Git에서 GitHub 암호를 캐시합니다 .
HTTPS를 사용하여 GitHub 리포지토리를 복제하는 경우 자격 증명 도우미를 사용하여 Git이 GitHub와 통신할 때마다 GitHub 사용자 이름과 암호를 기억하도록 Git에 지시할 수 있습니다.
이것은 Linux, Mac 및 Windows에서도 작동합니다.
이전 답변에 혼란스러워하는 초심자를 위해 다음을 수행할 수 있습니다.
git remote -v
다음과 같이 응답합니다.
origin https://yourname@github.com/yourname/yourrepo.git (fetch) origin https://yourname@github.com/yourname/yourrepo.git (push)
그런 다음 다른 많은 사람들이 제안한 명령을 실행할 수 있지만 이제 위에서 yourname과 yourrepo를 알 수 있으므로 위의 yourname/yourrepo.git
을 잘라내어 붙여넣을 수 있습니다.
git remote set-url origin git@github.com:yourname/yourrepo.git
SSH를 사용하고 개인 키가 암호로 암호화된 경우, push
pull
및 fetch
와 같은 Git으로 네트워크 작업을 수행할 때 개인 키의 암호/암호를 입력하라는 메시지가 계속 표시됩니다 .
당신이 당신의 암호 매번 입력 할 필요가 없도록하려는 경우, 당신은 사용할 수 있습니다 ssh-agent
내가 설명해으로, 터미널 세션 당 한 번만 개인 키 암호 자격 증명을 저장 하여 인증 에이전트에 대한 연결을 열 수 없습니다에 내 대답 :
$ eval `ssh-agent -s` $ ssh-add
ssh-agent
의 출력을 평가해야 하지만 다른 개발 환경 및 운영 체제에서도 동일한 작업을 수행해야 하는지 잘 모르겠습니다.
ssh-add
id_rsa
라는 .ssh
폴더에서 개인 키를 찾습니다. 그러나 다른 이름을 가진 키에 파일 경로를 전달할 수 있습니다.
터미널 세션이 끝나면 kill 플래그 -k
ssh-agent
를 종료할 수 있습니다.
$ ssh-agent -k
ssh-agent
매뉴얼에 설명된 대로 :
-k
현재 에이전트를 종료합니다(SSH_AGENT_PID 환경 변수에 의해 제공됨).
또한 다음과 같이 선택적 시간 초과 매개변수를 사용할 수 있습니다.
$ ssh-add -t <timeout>
여기서, <timeout>
되는 형식의 <n>h
위한 <n>
시간, <n>m
위한 <n>
분 등.
ssh-agent
매뉴얼 에 따르면 :
-t life
에이전트에 추가된 ID의 최대 수명에 대한 기본값을 설정합니다. 수명은 초 단위 또는 sshd_config(5) 에 지정된 시간 형식으로 지정할 수 있습니다. ssh-add(1) 를 사용하여 ID에 대해 지정된 수명이 이 값을 재정의합니다. 이 옵션이 없으면 기본 최대 수명은 영원합니다.
Cygwin 사용자는 Cygwin 에서 ssh-agent를 사용할 때 잠재적인 보안 위험을 인식해야 합니다.
사람들은 Cygwin 1 에서 ssh-agent의 잠재적인 위험을 인식해야 하지만 로컬 netstat 및 원격 포트에서 /tmp/ssh-foo에 지정된 포트가 누구에게나 액세스 가능한 것으로 보이지 않습니다...?
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
그리고 인용 링크에서 :
그러나, Cygwin에서의 유닉스 도메인 소켓은 근본적으로 불안전하고, 그래서이다 음 것을 나는 강하게 Cygwin에서 아래 ssh를 에이전트의 사용을 억제.
Cygwin에서 ssh-agent를 실행하면
/tmp/ssh-$USERNAME/
디렉토리에 AF_UNIX 소켓이 생성됩니다. Cygwin에서 AF_UNIX 소켓은 AF_INET 소켓을 통해 에뮬레이트됩니다. 메모장을 통해/tmp/ssh-$USERNAME/agent-socket-*
파일을 살펴보면 쉽게 알 수 있습니다. 당신은 다음과 같은 것을 보게 될 것입니다!<socket >2080
netstat -a
그리고 놀라움을 실행하십시오! 포트 2080을 수신하는 프로그램이 있습니다. ssh-agent입니다. ssh가 서버로부터 RSA 챌린지를 수신하면 해당/tmp/ssh-$USERNAME/agent-socket-*
(Cygwin에서는 이 경우localhost:2080
연결을 엽니다)를 참조하고 ssh에 요청합니다. -agent가 보유한 개인 키로 RSA 챌린지를 처리한 다음 ssh-agent에서 받은 응답을 서버로 전달하기만 하면 됩니다.Unix에서는 프로그램이 AF_UNIX 소켓에 액세스하려고 할 때 Unix 커널이 권한을 확인하기 때문에 이러한 시나리오는 문제 없이 작동합니다. 그러나 AF_INET 소켓의 경우 연결이 익명입니다("안전하지 않음"으로 읽음). Cygwin ssh-agent가 실행 중이라고 상상해보십시오. 악의적인 해커는 상자를 포트스캔하고, ssh-agent가 사용하는 열린 포트를 찾고, SSH 서버에 대한 연결을 열고, RSA 챌린지를 수신하고, 찾은 열린 포트를 통해 ssh-agent로 보내고, 수신할 수 있습니다. RSA 응답을 SSH 서버로 보내고 짜잔, 그/그녀가 귀하의 서버에 성공적으로 로그인했습니다.
출처: Git 설정
다음 명령은 얼마 동안( Git 1.7.10 이상) 메모리에 비밀번호를 저장합니다.
$ git config --global credential.helper cache # Set git to use the credential memory cache $ git config --global credential.helper 'cache --timeout=3600' # Set the cache to timeout after one hour (setting is in seconds)
Git pull 및 push에 https 를 사용하는 remote.origin.url
을 구성하여 푸시할 때마다 사용자 이름(또는/및 비밀번호)을 입력하지 않도록 합니다.
remote.origin.url
을 구성하는 방법:
URL 형식: https://{사용자 이름:비밀번호@}github.com/{소유자}/{리포지토리} URL의 매개변수: * 사용자 이름
선택 사항, 필요할 때 사용할 사용자 이름입니다.
입증, 지정된 경우 인증이 필요할 때 사용자 이름을 다시 입력할 필요가 없습니다. 이메일을 사용하지 마십시오. "@"가 없는 사용자 이름을 사용하십시오. 그렇지 않으면 URL을 올바르게 구문 분석할 수 없습니다. * 비밀번호 선택 사항, 인증이 필요할 때 사용할 비밀번호입니다. 지정하면 인증이 필요할 때 암호를 다시 입력할 필요가 없습니다. 팁: 이 값은 일반 텍스트로 저장되므로 보안을 위해 이 매개변수를 지정하지 마십시오. * 예 자식 설정 remote.origin.url https://eric@github.com/eric/myproject
ssh
설정 단계가 조금 더 복잡하더라도 ssh
https
보다 더 나은 솔루션이라고 생각합니다.
거친 단계:
ssh-keygen
, Windows의 msysgit
은 유사한 명령을 제공합니다.~/.ssh
. 그리고 ssh-add
명령을 통해 ssh 에이전트에 추가합니다.remote.origin.url
ssh
스타일로 변경 git@gitlab.com:myaccount/myrepo.git
팁:
https
와 ssh
프로토콜 간을 전환합니다. remote.origin.url
을 변경하는 것으로 충분하거나 repo_home/.git/config
직접 편집하여 값을 변경할 수 있습니다(예: Linux에서 vi
일반적으로 각 프로토콜에 한 줄을 추가하고 #
사용하여 그 중 하나를 주석 처리합니다.
예
[원격 "원점"] URL = git@gitlab.com:myaccount/myrepo.git # URL = https://myaccount@gitlab.com/myaccount/myrepo.git 가져오기 = +refs/heads/*:refs/remotes/origin/*
Git에서 GitHub 비밀번호를 캐시할 수 있습니다.
GitHub의 공식 문서 의 지침을 따르십시오.
위 링크의 지침을 따르면 매번 사용자 이름/비밀번호를 입력하지 않고도 저장소로 푸시/풀링할 수 있습니다.
Github 계정에서 2FA를 활성화 한 경우 일반 비밀번호는 이 용도로 작동하지 않지만 개인 액세스 토큰을 생성하고 대신 사용할 수 있습니다.
GitHub의 Settings
-> Developer Settings
-> Personal Access Tokens
페이지( https://github.com/settings/tokens/new )를 방문하여 모든 Repo 권한이 있는 새 토큰을 생성합니다.
그러면 페이지에 새 토큰 값이 표시됩니다. 이 값을 저장하고 GitHub의 리포지토리로 푸시할 때 암호 대신 사용합니다.
> git push origin develop Username for 'https://github.com': <your username> Password for 'https://<your username>@github.com': <your personal access token>
나를 위해 일한 것은 .git/config
를 편집하고 사용하는 것이 었습니다.
[remote "origin"] url = https://<login>:<password>@gitlab.com(...).git
이것은 암호를 저장하는 안전하지 않은 방법이지만 이것이 문제가 되지 않을 수 있는 환경/경우가 있다는 것은 말할 필요도 없습니다.
다른 옵션은 다음과 같습니다.
쓰는 대신
git push origin HEAD
다음과 같이 작성할 수 있습니다.
git push https://user:pass@yourrepo.com/path HEAD
분명히 대부분의 셸에서는 비밀번호가 기록에 캐시되므로 이를 염두에 두십시오.
SSH 키 또는 .netrc
파일이 작동하지 않으면 간단하지만 덜 안전한 또 다른 솔루션이 git-credential-store - 디스크에 자격 증명을 저장하는 도우미입니다.
git config --global credential.helper store
기본적으로 자격 증명은 ~/.git-credentials
파일에 저장됩니다. 작성되어 작성됩니다.
이 도우미를 사용하면 파일 시스템 권한으로만 보호되는 암호화되지 않은 암호가 디스크에 저장됩니다. 이것이 허용 가능한 보안 절충안이 아닐 수 있습니다.
Git 구성 파일을 직접 업데이트( 멋진 명령을 기억하지 않으려는 경우 ):
즐겨 사용하는 텍스트 편집기에서 .git/config
파일을 엽니다. 복제한 폴더 또는 git init
를 수행한 저장소에 있습니다. 해당 저장소로 이동합니다. .git
은 숨겨진 폴더이며 Ctrl + H를 누르면 숨겨진 폴더가 표시되어야 합니다(터미널에서 ls -a
.git/config
파일의 샘플입니다. 이 줄을 복사하여 붙여넣고 해당 줄을 Git 정보로 업데이트해야 합니다.
[user] name = Tux email = tux@gmail.com username = happy_feet [remote "origin"] url = https://github.com/happy_feet/my_code.git fetch = +refs/heads/*:refs/remotes/origin/*
SSH에 대해 다음 형식으로 URL 부분을 변경합니다.
url = git@github.com:happy_feet/my_code.git
( 위의 형식은 GitHub 또는 Bitbucket과 같은 다양한 Git 원격 서버에서 변경되지 않습니다. 버전 제어를 위해 Git을 사용하는 경우에도 동일합니다 ):
참고: 원격 Git 리포지토리에 연결하는 SSH 방식을 사용하려면 Git 원격 서버( 예: GitHub 또는 Bitbucket. 설정 페이지에서 SSH 키 검색)에 공개 SSH 키를 추가해야 합니다.
: 당신의 SSH 키를 생성하는 방법을 알고, 참조 SSH 키를 생성
나는 같은 문제가 있었다.
그래서 내 프로젝트에서 .git/config
파일을 변경했습니다.
url = https://github.com/<your-user-here>/<your-repo-here>
에게
url = git@github.com:<your-user-here>/<your-repo-here>
설정 중인 Git 프로필에 SSH 공개 키를 추가했습니다.
SSH 공개 키의 경우:
cat ~/.ssh/id_rsa.pub
Windows Git 사용자의 경우 git config --global credential.helper store
실행한 후 여전히 암호를 묻는 메시지가 표시되면 이 명령을 사용하여 구성 파일이 작성된 위치를 확인하는 것이 좋습니다.
git config --list --show-origin
제 경우에는 'C:\Program Files\Git\mingw64\etc\gitconfig' 구성 파일을 수동으로 편집하고 다음 텍스트를 추가한 후 작동했습니다.
[credential] helper = store
SSH 대신 HTTPS를 복제했고 pull, push 및 fetch 시 사용자 이름 및 비밀번호 프롬프트 문제가 발생한 경우. UBUNTU에 대해 간단히 이 문제를 해결할 수 있습니다.
1단계: 루트 디렉토리로 이동
cd ~/
.git-credentials 파일 생성
당신이 그 파일에이 내용을 추가 usename
password
및 githosting URL
https://user:pass@example.com
그런 다음 명령을 실행하십시오.
git config --global credential.helper store
이제 번거로움 없이 리포지토리에서 푸시를 풀고 모든 세부 정보를 가져올 수 있습니다.
이것이 나를 위해 일한 것입니다.
git remote set-url origin https://username@github.com/username/reponame.git
예시:
git remote set-url origin https://jsmith@github.com/jsmith/master.git
기본적으로 두 가지 옵션이 있습니다.
두 컴퓨터에서 동일한 사용자를 사용하는 경우 .pub 키를 PC에 복사해야 GitHub에서 동일한 사용자임을 알 수 있습니다.
PC용으로 새 .pub 파일을 생성하고 머신을 다른 사용자로 취급하려면 GitHub 웹사이트에서 새 .pub 파일을 등록해야 합니다.
그래도 작동하지 않으면 ssh가 올바르게 구성되지 않았고 해당 ssh가 키 위치를 찾지 못했기 때문일 수 있습니다. 노력하다
ssh -vv username@github.com
SSH가 실패하는 이유에 대한 자세한 정보를 얻으려면.
HTTPS용 업데이트:
GitHub는 HTTPS를 사용할 때 자격 증명을 저장하는 새로운 Windows용 프로그램을 출시했습니다.
사용:
여기 에서 프로그램 다운로드
프로그램을 실행하면 .gitconfig
파일이 편집됩니다. 여러 개가 있는 경우 .gitconfig
를 편집했는지 다시 확인하세요. 올바른 것을 편집하지 않았다면 다음을 .gitconfig
[credential] helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
[credential]
뒤의 줄 바꿈. 필수입니다.
명령줄 클라이언트를 열고 git push origin master
한 번 시도합니다. 암호를 묻는 메시지가 나타나면 암호를 입력하면 완료됩니다. 비밀번호가 저장되었습니다!
두 단계를 수행해야 합니다.
git remote remove origin
git remote add origin git@github.com:NuggetAI/nugget.git
Git URL은 HTTPS URL이 아닌 SSH URL입니다... 여기에서 선택할 수 있습니다.
현재 SSH 키 나열:
ls -l ~/.ssh
새 SSH 키 생성:
ssh-keygen -t ed25519 -C "your_email@example.com"
여기서 your_email@example.com
을 GitHub 이메일 주소로 바꿔야 합니다.
Enter a file in which to save the key
을 입력하라는 메시지가 표시되면 Enter 키를 누릅니다 .
암호를 입력할 때 Enter passphrase (empty for no passphrase)
- Enter 키를 누르 십시오 (비어 있는 암호의 경우).
SSH 키를 다시 나열하십시오.
ls -l ~/.ssh
이제 id_ed25519
및 id_ed25519.pub
파일이 추가되어야 합니다.
백그라운드에서 ssh-agent를 시작합니다.
eval $(ssh-agent -s)
SSH 개인 키를 ssh-agent에 추가합니다.
ssh-add ~/.ssh/id_ed25519
다음으로 공개 키를 터미널 화면에 출력합니다.
cat ~/.ssh/id_ed25519.pub
출력을 클립보드에 복사합니다( Ctrl + Insert ).
https://github.com/<your-github-username>
으로 이동하여 사용자 이름과 비밀번호로 로그인합니다.
오른쪽 상단 모서리에서 GitHub 아바타를 클릭한 다음 설정 을 클릭합니다. 왼쪽 창에서 SSH 및 GPG 키를 클릭합니다. 녹색 버튼 새 SSH 키를 클릭하고 공개 SSH 키를 Key 라는 레이블이 지정된 텍스트 영역에 붙여넣습니다. 이 SSH 키를 사용할 컴퓨터를 알려주는 설명적인 제목을 사용하십시오. SSH 키 추가를 클릭합니다.
현재 로컬 저장소가 http 및 username 으로 생성된 경우 SSH와 호환되도록 다시 생성해야 합니다.
먼저 작업을 잃지 않도록 깨끗한 작업 트리가 있는지 확인하십시오.
git status
그런 다음 cd ..
상위 디렉토리 및 rm -fr <name-of-your-repo>
.
마지막으로 사용자 이름/암호 대신 SSH를 사용하는 새 복사본을 복제합니다.
git clone git@github.com:[your-github-username]/[repository-name].git
참조:
https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh- 에이전트
https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account
Windows에서 Git(예: Git Bash)을 사용하는 경우(그리고 HTTPS에서 SSH로 전환하지 않으려는 경우) Windows용 Git 자격 증명 관리자를 사용할 수도 있습니다.
이 응용 프로그램은 사용자 이름과 암호를 유지합니다...
많은 사용자가 말했듯이 Git 저장소 URL을 HTTPS에서 SSH로 변경하기만 하면 됩니다.
머신에서 SSH 키를 생성하지 않은 경우 생성해야 합니다.
추가 정보로 이 변경을 수행한 후에도 여전히 동일한 오류가 발생했습니다.
권한이 거부되었습니다.
제 경우에는 Windows 셸을 사용하여 ngh 명령을 실행하는 것이 문제였습니다. 이 명령은 SSH 구문을 요청하는 프롬프트를 열어야 하고 Windows Shell은 이러한 종류의 프롬프트를 열지 않기 때문에 인증에 실패했습니다.
그래서 Git 셸을 열고 거기에서 ngh 명령을 실행하고 SSH 구문을 요청할 때마다 프롬프트에 입력하고 "voilà"... 제대로 작동했습니다!
Settings
-> Developer Settings
-> Personal Access Tokens
페이지( https://github.com/settings/tokens/new )로 이동하여 모든 Repo 권한이 있는 새 토큰을 생성합니다.github.com
검색 -> Show password
클릭한 다음 방금 복사한 token
을 붙여넣습니다. # gen the pub and priv keys # use "strange" naming convention, because those WILL BE more than 10 ... ssh-keygen -t rsa -b 4096 -C "me@corp.com" -f ~/.ssh/id_rsa.me@corp.com@`hostname -s` # set the git alias ONLY this shell session alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me@corp.com.`hostname -s`" git' # who did what when and why git log --pretty --format='%h %ai %<(15)%ae ::: %s' # set the git msg export git_msg='issue-123 my important commit msg' # add all files ( danger !!! ) and commit them with the msg git add --all ; git commit -m "$git_msg" --author "Me <me@corp.com" # finally git push
출처 : http:www.stackoverflow.com/questions/6565357/git-push-requires-username-and-password
콜백 내에서 올바른 `this`에 액세스하는 방법 (0) | 2022.01.22 |
---|---|
웹사이트 개발을 위해 Chrome 캐시 비활성화 (0) | 2022.01.14 |
가장 최근 커밋으로 정렬된 Git 브랜치 목록을 얻으려면 어떻게 해야 합니까? (0) | 2022.01.14 |
<가 <=보다 빠릅니까? (0) | 2022.01.14 |
JavaScript에서 ==와 ===의 차이점 [중복] (0) | 2022.01.14 |