새 리포지토리에 대해 git을 ssh로 기본 설정하고 https가 아닌 방법


206

요즘 설정 페이지의 GitHub에서 새 저장소를 만들면 다음과 같은 결과가 나타납니다.

git remote add origin https://github.com/nikhilbhardwaj/abc.git
git push -u origin master

커밋을 푸시해야 할 때마다 GitHub 사용자 이름과 비밀번호를 입력해야합니다.

수동으로 변경할 수 있습니다

git@github.com:nikhilbhardwaj/abc.git

에서 .git/config. 나는 이것이 매우 자극적 이라는 것을 알았습니다. 기본적으로 SSH를 사용하도록 git을 구성 할 수있는 방법이 있습니까?


@MoOx의 대답은 아마도 당신이 찾고있는 것과 가장 일치한다고 생각합니다. 이 insteadOf트릭은 2012 년 이후부터 사용되었습니다 . URL을 URL 로 변환하는 방법git:http: 도 참조하십시오 .
jww

답변:


300

리포지토리의 원점을 SSH로 설정

GitHub 리포지토리 설정 페이지는 제안 된 명령 목록 일뿐입니다 (GitHub는 이제 HTTPS 프로토콜 사용을 제안합니다). GitHub 사이트에 대한 관리 액세스 권한이 없으면 제안 된 명령을 변경하는 방법을 모릅니다.

SSH 프로토콜을 사용하려면 간단히 원격 브랜치를 추가하십시오 (예 : GitHub의 권장 명령 대신 이 명령 사용 ). 기존 분기를 수정하려면 다음 섹션을 참조하십시오.

$ git remote add origin git@github.com:nikhilbhardwaj/abc.git

기존 리포지토리 수정

이미 알고 있듯이 HTTPS 대신 SSH를 사용하도록 기존 저장소를 전환하기 위해 .git/config파일 내에서 원격 URL을 변경할 수 있습니다 .

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    -url = https://github.com/nikhilbhardwaj/abc.git
    +url = git@github.com:nikhilbhardwaj/abc.git

바로 가기는 다음 set-url명령 을 사용하는 것입니다 .

$ git remote set-url origin git@github.com:nikhilbhardwaj/abc.git

SSH-HTTPS 스위치에 대한 추가 정보


고마워, 나는 그들이 똑똑한 https를 기본값으로 만드는 것에 대해 몰랐다.
nikhil 2016 년

3
이것은 Windows 사용자에게는 좋지만 Linux에서는 한 단계 뒤떨어졌습니다. ssh는 항상 작동했으며 Smart HTTPS의 새로운 암호 캐싱은 Windows에서만 작동합니다. "Mac 버전은 어디에 있습니까?" 에 대한 메모가 있습니다. 리눅스 사용자에게는 마디도 아닙니다 .
MestreLion

나는이 방법이 github의 맥 클라이언트를 전혀 방해하지 않는다는 것을 덧붙여 야한다. 변경하면 문제없이 git의 명령 줄과 GUI 버전 (github의 클라이언트)을 모두 사용할 수 있습니다.
Kemal Dağ

1
다시 set-url도와주세요! 고마워요!
guozqzzu

182
  • 깃 허브

    git config --global url.ssh://git@github.com/.insteadOf https://github.com/
    
  • 비트 버킷

    git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/
    

이것은 git에게 GitHub / BitBucket에 연결할 때 항상 HTTPS 대신 SSH를 사용하도록 지시하므로 비밀번호를 묻는 메시지 대신 기본적으로 인증서로 인증합니다.


4
문서 에서이 내용을 찾으 려면 검색하십시오 url.<base>.insteadOf.

2
이 변경 사항을 깨뜨릴 수 있다는 점에주의하십시오.이 변경을 수행 한 후 (즉, 기본 버전이 아닌 버전 / 분기 설치) Homebrew의 일부 기능이 작동을 멈춘 것으로 나타났습니다
Prefix

1
gitlab의 경우 : git config --global url.ssh : //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
나는 생각 //git@github.com : .insteadOf이 자식 설정 --global url.ssh해야한다는 github.com , github에이 git@github.com 좋아하기 때문에 <USERNAME> / <REPO> .git. (편집 git config --global url.git@github.com:.insteadOf https://github.com/은 git 2.7.4에서 작동합니다.)
Glen Keane

1
여기에 의견이 homebrew 문제를 언급 했으므로 --globalpr repo 기준으로 제거 하고 수행 하는 것이 좋습니다 .
Pylinux

58

트레버 의해 제공된 응답이 올 .

그러나 여기에 직접 추가 할 수있는 것이 있습니다 .gitconfig:

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
  insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/

2
훨씬 더 간단한 +1
PiersyP

이 트릭에 +1 . 커널 사람들도 권장합니다. 커널 초보자 메일 링리스트의 git pull 도 참조하십시오 .
jww

훨씬 더 깨끗한 솔루션- "go get"이 https로 기본 설정되어 있고 개인
저장소

1
Gitlab의 경우 : [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/도있다 pushInsteadOf당신이 푸시 URL에 영향을 미치지 만 가져 오지하려는 경우. git remote -vgit이 사용할 효과적인 URL을 검사하는 데 사용할 수 있습니다 .
Beni Cherniavsky-Paskin

적어도 기존 리포지토리에서는 작동하지 않습니다.
Andrew Koster

4

ssh 대신 https에서 저장소를 실수로 복제했을 수 있습니다. github 에서이 실수를 여러 번했습니다. https 링크 대신 복제 할 때 처음에 ssh 링크를 복사해야합니다.


ssh 링크를 사용하여 새로운 것을 복제해야합니다
codenamezero

HTTP에서 SSH로 repo 링크를 변경할 수도 있습니다. 다른 답변을 참조하십시오.
Mike Lyons

3

https가 아닌 ssh에서 복제해야합니다.

이를 위해서는 ssh 키를 설정해야합니다. 이것을 자동화하는이 작은 스크립트를 준비했습니다 :

#!/usr/bin/env bash
email="$1"
hostname="$2"
hostalias="$hostname"
keypath="$HOME/.ssh/${hostname}_rsa"
ssh-keygen -t rsa -C $email -f $keypath
if [ $? -eq 0 ]; then
cat >> ~/.ssh/config <<EOF
Host $hostalias
        Hostname $hostname *.$hostname
        User git
    IdentitiesOnly yes
        IdentityFile $keypath
EOF
fi

그리고 그것을처럼 실행

bash script.sh myemail@example.com github.com

원격 URL 변경

git remote set-url origin git@github.com:user/foo.git

의 내용 추가 ~/.ssh/github.com_rsa.pubgithub.com에서 ssh 키에

연결 확인

ssh -T git@github.com

0

SSH 파일

~/.ssh/config file
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
    LogLevel QUIET
    ConnectTimeout=10
Host github.com
        User git
        AddKeystoAgent yes
        UseKeychain yes
        Identityfile ~/github_rsa

reponame / .git / config 편집

[remote "origin"]
        url = git@github.com:username/repo.git
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.