Git에서 쉘 명령을 실행할 때 사용할 개인 SSH 키를 지정하는 방법은 무엇입니까?


1108

다소 특이한 상황이지만 로컬 컴퓨터에서 쉘 (git) 명령을 실행할 때 사용할 개인 SSH 키를 지정하고 싶습니다.

기본적으로 다음과 같이 :

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

또는 더 나은 (루비에서) :

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

지정된 개인 키를 사용하는 Net :: SSH를 사용하여 원격 서버에 연결하는 예를 보았지만 로컬 명령입니다. 가능합니까?



28
왜 이것이 비정상적인지 궁금해서 Git에 -i옵션 이 없습니다 ssh.
Nick T

29
git 2.10 (Q3 2016)을 사용하면 새로운 구성도 있습니다 git config core.sshCommand 'ssh -i private_key_file'. 아래 답변을
VonC

3
내 의견으로는, HeyWatchThis 답변은 현재 승인 된 답변이 요구하는대로 각 git 명령에 대해 서브 쉘을 만들 필요없이 설치 후 모든 git 명령을 정상적으로 실행할 수 있으므로 허용되는 답변이어야합니다.
gloriphobia

답변:


798

이와 같은 것이 작동해야합니다 (orip에서 제안 함).

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

서브 쉘을 선호하는 경우 다음을 시도해 볼 수 있습니다 (더 취약하기는하지만).

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Git은 SSH를 호출하여 환경 변수별로 에이전트를 찾습니다. 그러면 키가로드됩니다.

또한, 설정 HOME또한 트릭을 할 수 있습니다, 당신은 설정 만 포함하는 디렉토리에 기꺼이 제공하는 .ssh디렉토리로를 HOME; 여기에는 identity.pub 또는 구성 파일 설정 IdentityFile 이 포함될 수 있습니다 .


5
그러나 이것은 키를 영구적으로 허용되는 SSH 키로 추가 할 것입니다. user2가 사용자의 프로젝트를 망칠 수 없도록 피하고 싶습니다. 웹 응용 프로그램을위한 것이기 때문에 최상의 옵션이었던 다른 OS 사용자를 사용하는 것은 실용적이지 않습니다.
Christoffer

28
아니오, git이 완료되면 ssh-agent가 종료되고 키를 잊어 버렸습니다.
Martin v. Löwis

6
이 명령은 Windows git bash에서 작동하지 않습니다. 예상치 못한 토큰 'ssh-add'근처에 구문 오류가
표시됨

116
고정 명령 행 (Windows 또는 Linux 용)은 다음과 같습니다.ssh-agent bash -c 'ssh-add sshkey; git clone url'
orip

4
ssh-agent $(..)구문은 나를 위해 작동하지 않습니다와 나는이이 일에 가정되어 있는지 확인하는 방법을 모르겠어요 : (바) 쉬 내부의 명령을 실행해야 $(..)매개 변수로 출력 먼저, 다음 실행 ssh를 에이전트.
Johannes 'fish'Ziemke

1199

이 솔루션들 중 어느 것도 나를 위해 일하지 않았습니다.

대신 @Martin v. Löwis의 configSSH 파일 설정에 대해 자세히 설명합니다 .

SSH는 사용자 ~/.ssh/config파일을 찾습니다 . 내 설정은 다음과 같습니다.

Host gitserv
    Hostname remote.server.com
    IdentityFile ~/.ssh/id_rsa.github
    IdentitiesOnly yes # see NOTES below

그리고 원격 git 저장소를 추가합니다.

git remote add origin git@gitserv:myrepo.git

그런 다음 git 명령이 정상적으로 작동합니다.

git push -v origin master

노트

  • 그만큼 IdentitiesOnly yes 각 프로토콜의 기본 파일 이름과 일치하는 ID 파일을 보내는 SSH 기본 동작방지 하기 위해 필요 합니다. 이 옵션을 사용하지 않고 이름 ~/.ssh/id_rsa이 지정된 파일 이 있으면 시도해보십시오 ~/.ssh/id_rsa.github.

참고 문헌


17
.ssh / config를 사용하여 여러 키를 지정할 때 "git remote add"명령의 일부로 "Host"줄에 호스트 친구 이름을 사용해야한다는 것을 알았습니다. 행이 "Host stg"인 경우 git remote add <someName> user @ stg : /path_to_git_repo.git "를 사용해야합니다. user@myserver.com : /path_to_git_repo.git와 같은 정확한 서버 이름을 사용하는 경우 구성 파일 git에 의해 선택되지 않기 때문에 개인 키 파일을 올바르게 선택하지 않습니다. 나는 동일한 내용을 github 및 heroku에 푸시하여 시도했으며 "git remote add"에서 친숙한 이름을 지정할 때만 작동합니다.
Gopinath MR

2
github의 호스트에 대해 확신하지 못했습니다. 나는이 링크를 발견 gist.github.com/jexchan/2351996를 .
Karsten

1
보세요 여기 당신이 몇 자식 저장소에 대한 몇 가지 주요 파일을 갖고 싶어
e271p314

1
당신은 사용할 수 있습니다 Host remote.server.com원래 URL을 계속 사용
MauganRa

5
이것은 두 가지 변경 후에 나를 위해 일했습니다. 구성 파일이 새 파일이면 잊지 마십시오 chmod 600 ~/.ssh/config( 여기 참조 ). 당신은 GitHub의를 사용하는 경우에, 교체 Host gitservHost github.com생략 Hostname remote.server.com하고, 함께 원격 추가 git remote add origin git@github.com:user_name/repo_name.git.
miguelmorin 2016 년

479

Git 2.3.0부터 간단한 명령이 있습니다 (설정 파일이 필요하지 않습니다).

GIT_SSH_COMMAND='ssh -i private_key_file' git clone user@host:repo.git

3
내가 얻을 cannot run ssh -i /home/vagrant/.ssh/git: No such file or directory이 존재하지만 444 Nov 16 18:12 /home/vagrant/.ssh/git에서ls -l /home/vagrant/.ssh/git
테드

3
@ted : chmod 400 /home/vagrant/.ssh/git
Yash

8
좋고 쉬운 해결책. 이 작업을 많이 수행해야하는 경우 별칭을 만드는 것이 좋습니다.
Lasse Meyer

5
잊지 마세요 chmod 400 <path-to-private-key-file>. 그렇지 않으면 git 명령이 특별한 오류 메시지없이 실패 할 수 있습니다 ...
Eonil

5
SSH 에이전트의 키가 아닌 -o IdentitiesOnly=yes키로 지정된 키 -i가 사용 되도록 이 응답이 포함되어 있으면 좋을 것 입니다.
robinst

423

다른 사람들의 제안 ~/.ssh/config은 매우 복잡합니다. 다음과 같이 간단 할 수 있습니다.

Host github.com
  IdentityFile ~/.ssh/github_rsa

30
IdentitiesOnly옵션도 필요합니다 .
Flimm

4
@EnzeChi 당신은 리모컨을 조작하여 여러 개의 github 계정을 가질 수 있습니다 : git remote add ssh://personal/org/proj.git && git remote add ssh://corporate/org/proj.git. 그러면 설정은 다음과 같습니다Host personal HostName github.com ... Host corporate HostName github.com
emory

@ EnzeChi 비슷한 두 가지 ssh 키-하나는 가져 오기 및 다른 하나는 푸시를 사용하도록 비슷한 작업을 수행합니다. 가져 오기에는 암호가 없습니다. 푸시는 않습니다.
emory

144

my_git_ssh_wrapper의 내용 :

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

그런 다음 다음을 수행하여 키를 사용할 수 있습니다.

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git

4
같은 도메인에 하나 이상의 계정이있는 경우 다른 솔루션으로는 잘 처리되지 않는 매우 좋은 솔루션
Beka

1
좋은 해결책. > GIT_SSH = my_git_ssh_wrapper를 사용하여이를 단순화 할 수도 있습니다. git clone git@github.com : TheUser / TheProject.git
Shiva

2
이 솔루션은 또한 홈 디렉토리없이 계정의 git을 사용하려는 상황을 다룹니다.
piotrekkr

환상적인. 개인 서버 GIT_SSH="git_wrapper" git clone ssh://user@server/path/to/project"
ton

1
이것은 cygwin 환경에서 나를 위해 일한 유일한 방법입니다
ChatterOne

113

자식으로 2.10+ (Q3 2016 9월 발표는 2016 내지 2d), 당신은 설정 할 수있는 가능성이 설정 에 대한 GIT_SSH_COMMAND(에 설명 된대로뿐 아니라 환경 변수를 로베르 잭 윌대답 )

참조 3c8ede3 커밋 에 의해 (2016년 6월 26일를) 응웬 타이 응옥 두이 ( pclouds) .
(의해 병합 - Junio C 하마노 gitster-dc21164 커밋 2,016 7 월를 19)

리포지토리 당 사용할 core.sshCommand값을 지정하기 위해 새로운 구성 변수 가 추가되었습니다 GIT_SSH_COMMAND.

core.sshCommand:

이 변수가 설정되어있는 경우 git fetchgit push대신 지정된 명령을 사용합니다 ssh그들은 원격 시스템에 연결해야 할 때.
명령은 GIT_SSH_COMMAND환경 변수와 동일한 형식 이며 환경 변수가 설정되면 대체됩니다.

그것은 git clone될 수 있음을 의미합니다 :

cd /path/to/my/repo
git config core.sshCommand 'ssh -i private_key_file' 
# later on
git clone host:repo.git

하나의 명령으로 설정할 수도 있습니다.

git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git

이것은 Mátyás Kuti-Kreszács에 의해 지적GIT_SSH_COMMAND바와 같이 Windows에서 환경 변수를 설정하는 것보다 쉽습니다 .

set "GIT_SSH_COMMAND=ssh -i private_key_file"


출시되었습니다.
Flimm

4
공장. 사람들은 이것이 최선의 대답이라고 생각해야합니다. 일단 발행되면, .git / config 파일을 사전에 / tmp에 복사 된 버전으로 비교하는 것이 유익 할 수 있습니다. 새로운 엔트리가 생성되었습니다 : sshCommand = ... 가치있는 것을 위해 'git config core.sshCommand "ssh -i $ HOME / .ssh / privatekeyfile"을 사용했습니다.
WeakPointer

1
@Spanky 인라인 명령 git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git다음에 구성 설정을 수행 할 수 있습니다.git config core.sshCommand 'ssh -i private_key_file'
dav_i

1
이것은 확실히 최고의 답변입니다!
Wagner Patriota

111

답변과 의견 을 요약 하면 다른 키 파일을 사용하도록 git을 설정 한 다음 잊어 버리는 가장 좋은 방법은 Windows에서 작동하는 동일한 호스트 (예 : 개인 GitHub 계정 및 작업 계정)에 대해 다른 사용자를 지원합니다. 또한 여러 ID 를 편집 ~/.ssh/config(또는 c:\Users\<your user>\.ssh\config)하고 지정하는 것입니다.

Host github.com
HostName github.com
IdentityFile /path/to/your/personal/github/private/key
User dandv

Host github-work
HostName github.com
IdentityFile /path/to/your/work/github/private/key
User workuser

그런 다음 개인 사용자로 프로젝트를 복제하려면 정기적으로 실행하십시오. git clone 명령을 .

로 repo를 복제하려면를 workuser실행하십시오 git clone git@github-work:company/project.git.


3
당신이 말하는 모든 것이 이미 위의 답변과 내 눈에, 더 명확하게 덮여 있기 때문에 나는 당신을 downvoted. 예를 들어, 왜 사용자를 각각 e dandv와 workuser로 정의합니까?
hroptatyr

2
새로운 정보없이 4 살짜리 질문에 답변했으며 귀하의 답변이 "가장 좋은 방법"이라고 주장하고 있습니다. 또한 귀하는 다른 사용자가 자신의 답변을 제거하도록 ...
rudimeier

@hroptatyr : 내가 사용했습니다 dandvworkuser내 예를 들어, "예를 들어 개인 GitHub의 계정과 작업 한"을 지원합니다. dandv내 GitHub 사용자 이름입니다.
Dan Dascalescu

12
호스트 별칭을 설명하기 때문에 @thamster보다 더 나은 대답이라고 생각합니다.
데이비드 몰스

2
나는이 답변을 좋아한다. 그러나 나를 위해 이것은 IdentitiesOnly yes내 ssh 구성 파일에 추가 하는 경우에만 작동 합니다.
winni2k

75

여기에 언급 된대로 : https://superuser.com/a/912281/607049

리포마다 구성 할 수 있습니다.

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"
git pull
git push

1
무엇을 -F /dev/null합니까? 내가 볼 수있는 한 이것이 configFile을 ~/.ssh/config기본값 에서 변경 하지만 왜 바람직한가 ? 샌드 박스 명령을 보장하려면?
Dominic

3
linuxcommand.org/man_pages/ssh1.html 은 설정 파일을 지정하지 않으므로 git이 ssh를 실행할 때 구성 파일이 전달되지 않습니다 (실제로 샌드 박스 모드의 일종이므로 사용자 구성 기본 옵션은 무시하십시오) 수퍼 유저의 원래 스레드는 -F에 대한 자세한 정보
David

1
내가 찾던 것. 감사!
잃어버린 시민

kuber 환경에서 작업하기위한 AAAAA + 솔루션. 감사!
코브라 vs 닌자

1
Hi 이것을 이것을 서브 모듈에 전파하는 방법을 알고 있습니까?
아카 프라 바 바수

38

문제는 동일한 호스트에 다른 원격 저장소 (예 : github.com)가 있고 다른 ssh 키를 사용하여 상호 작용하려는 경우입니다 (예 : 다른 GitHub 계정)를 입니다.

그렇게하려면 :

  1. 먼저 ~/.ssh/config파일에 다른 키를 선언해야 합니다.

    # Key for usual repositories on github.com
    Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
    
    # Key for a particular repository on github.com
    Host XXX
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_other_rsa

    이렇게하면 두 번째 키를 github.com의 새로운 이름 "XXX"와 연결합니다.

  2. 그런 다음 방금 정의한 이름을 사용하도록 특정 저장소의 원격 출처를 변경해야합니다.

    명령 프롬프트에서 로컬 저장소 폴더로 이동하여 현재 원격 원점을 표시하십시오.

    >git remote -v
    origin  git@github.com:myuser/myrepo.git (fetch)
    origin  git@github.com:myuser/myrepo.git (push)

    그런 다음 다음을 사용하여 원점을 변경하십시오.

    >git remote set-url origin git@XXX:myuser/myrepo.git
    >git remote -v
    origin  git@XXX:myuser/myrepo.git (fetch)
    origin  git@XXX:myuser/myrepo.git (push)

    이제 올바른 키를 사용하여 자동으로 푸시, 페치 할 수 있습니다.


1
이것은 내 생각에 가장 "올바른"답변이며, ssh 구성 파일에서 연결 및 키를 구성하는 것이 가장 좋습니다.
jamescampbell

다른 솔루션은 해결 방법처럼 보이며 도구가 지원하는 훌륭한 기능을 사용하고 있습니다.
Craig.C

굉장히 내가 찾던 것, 고마워 !!
magikMaker

37
GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key" git clone $git_repo

또는

export GIT_SSH_COMMAND="ssh -i /path/to/git-private-access-key"
git clone REPO
git push

이것은 나를 위해 일했습니다.
mohammed_ayaz

36

다음 .ssh/config과 같이 호스트 또는 IP를 파일 에 추가하는 것이 좋습니다 .

Host (a space separated list of made up aliases you want to use for the host)
    User git
    Hostname (ip or hostname of git server)
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_(the key you want for this repo)

1
유용하지만 해당 호스트 이름과의 모든 상호 작용에 repo 키를 사용합니다. 동일한 서버에 다른 키가 필요한 다른 저장소가있는 경우 래퍼를 사용하고 git에게 GIT_SSH와 함께 사용하도록 지시하는 것이 좋습니다.
Joe Block

11
반드시 그런 것은 아닙니다. Github에는 여러 개의 키를 사용합니다. 하나는 업무용이고 다른 하나는 개인 계정입니다. "호스트"에 도메인 이름을 입력하지 않아도됩니다. 원하는 모든 종류의 별칭을 넣을 수 있습니다. 예를 들어, gh-home 및 gh-work를 호스트 이름으로 사용하고 예를 들어 복제 할 때 git clone git@gh-work:repo/project.git ~ / .ssh / config에 HostName에 github.com을 사용하는 두 개의 섹션이 있습니다. 그들은 단지 다른 IdentityFile과 호스트를 가지고 있습니다
blockloop

@ brettof86이 전략은 대부분 작동하지만 체크 아웃 할 저장소는 github에서 호스팅되는 gem에 따라 어떻게됩니까? Gemfile에서 github 저장소에 대한 참조는 "alias"를 포함하지 않을 것입니다. 프로젝트에서 다른 개발자를 위해 일을 중단하고 싶지 않다면 ...
ktec

@ brettof86 또한 두 가지 다른 github 계정 (직장, 집)이 있지만 예제를 얻을 수 없습니다. 두 가지 샘플을 게시 할 수 있습니까?
Climbs_lika_Spyder

@Climbs_lika_Spyder 여기에 ~/.ssh/config pastebin.com/8rYn7yCi
blockloop

32

GIT_SSH 환경 변수와 함께 갔다. 위의 Joe Block과 비슷한 래퍼가 있지만 모든 인수를 처리합니다.

파일 ~ / gitwrap.sh

#!/bin/bash
ssh -i ~/.ssh/gitkey_rsa "$@"

그런 다음 내 .bashrc에서 다음을 추가하십시오.

export GIT_SSH=~/gitwrap.sh

나는 이것을 .bashrc에 설정했다. 그러나 openshift 인스턴스에 로그인 할 때 호출하지 않는 것 같습니다. 뭔가 빠졌습니까?
Jigar Shah

실행할 수 없습니다 /tmp/gitwrap.sh : 그것은 나에 대한 오류 .. 그 스크립트 이벤트를 찾을 수 없습니다에 ... 오류가가는 그이 .. 확실하지 무슨 일이 비록 실패 이러한 파일이 없습니다 또는 디렉토리
ap1234

"No such file or directory"라는 오류가 발생하면 전체 경로 gitwrap.sh를 입력하십시오 (예 :/home/ubuntu/gitwrap.sh
Tahir Akhtar

-o StrictHostKeyChecking=nossh 명령 에 추가하고 싶을 수도 있습니다
dan-man

12

여기에 다른 솔루션 중 어느 것도 효과가 없으며 여러 개의 ssh 키를 만들었지 만 여전히 간단한 작업을 수행 할 수없는 경우

git pull

그런 다음 두 개의 ssh 키 파일이 있다고 가정하면

id_rsa
id_rsa_other_key

그런 다음 git repo 내부에서 다음을 시도하십시오.

# Run these commands INSIDE your git directory
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_other_key

또한 github 기본 사용자 이름과 사용자 ID가 다음과 같이 올바른지 확인하십시오.

# Run these commands INSIDE your git directory
git config user.name "Mona Lisa"
git config user.email "mona.lisa@email.com"

자세한 내용은 https://gist.github.com/jexchan/2351996 을 참조 하십시오 .


주 당신이 얻을 경우 Could not open a connection to your authentication agent., 시도 $ eval `ssh-agent -s`, 다시 시도하십시오.
cgnorthcutt

1
길을 잃은 사람들에게는 ssh-add커맨드 트릭이 나를 위해 일했습니다. ssh가 인증 할 때 시도되는 ID 목록에 ID 키를 추가하십시오. 이것은 나를 위해 잘 작동했습니다!
벤 카트 라이트

어떤 디렉토리에서 실행하는 것이 중요하다고 생각 ssh-add합니까?
트리플 리

@BenCartwright 전역 설정이 아니라 로컬 설정을 수정하기 때문입니다. 이 접근법 .git은 전역 적으로 git 프로그램이 아닌 repo 내부를 수정합니다 . --global글로벌 사용자 이름과 이메일을 설정 하는 데 사용할 수 있습니다 .
cgnorthcutt

11

당신이 정상적인 요청 (와 GitHub의에 연결해야하는 경우 git pull origin master로 호스트를 설정) *에서 ~/.ssh/config나를 위해 일한, 다른 호스트 (예를 들어, "GitHub의"또는 "GB")는 작동되지 않았습니다.

Host *
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_xxx

그런 다음 전체 "Host *"행을 그대로 두십시오.
lionello

1
원격 URL과 일치하지 않아 작동하지 않았을 수 있습니다. 사용 Host my-host-alias하려면을 설정해야합니다 remote.origin.url=git@my-host-alias:[username]/[repo].git.
David Moles

11

이러한 솔루션 중 상당수는 유혹적이었습니다. 그러나 다음 링크에서 일반적인 git-wrapping-script 접근 방식이 가장 유용하다는 것을 알았습니다.

git명령으로 ssh 키 파일을 지정하는 방법

요점 git은 다음과 같은 명령 이 없다는 것입니다 .

git -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

Alvin의 솔루션은 이러한 차이를 메우는 잘 정의 된 bash-wrapper 스크립트를 사용하는 것입니다.

git.sh -i ~/.ssh/thatuserkey.pem clone thatuser@myserver.com:/git/repo.git

어디에 git.sh:

#!/bin/bash

# The MIT License (MIT)
# Copyright (c) 2013 Alvin Abad
# https://alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command

if [ $# -eq 0 ]; then
    echo "Git wrapper script that can specify an ssh-key file
Usage:
    git.sh -i ssh-key-file git-command
    "
    exit 1
fi

# remove temporary file on exit
trap 'rm -f /tmp/.git_ssh.$$' 0

if [ "$1" = "-i" ]; then
    SSH_KEY=$2; shift; shift
    echo "ssh -i $SSH_KEY \$@" > /tmp/.git_ssh.$$
    chmod +x /tmp/.git_ssh.$$
    export GIT_SSH=/tmp/.git_ssh.$$
fi

# in case the git command is repeated
[ "$1" = "git" ] && shift

# Run the git command
git "$@"

I는이 I는 원격의 bitbucket의 REPO 위해 사용자 / 키 인식에 구비 된 문제를 해결할 수 있음을 확인 git remote update, git pull, 및 git clone; cron제한된 쉘을 탐색하는 데 문제가 있는 작업 스크립트 에서 모두 제대로 작동합니다 . 또한 R 내 에서이 스크립트를 호출 할 수 있었고 여전히 똑같은 cron실행 문제 (예 :)를 해결할 수있었습니다 system("bash git.sh -i ~/.ssh/thatuserkey.pem pull").

R은 Ruby와 동일하지 않지만 R이 할 수 있다면 ... O :-)


1
좋아 보인다! 나는 이것을 테스트하고 답장을 할 것이다.
BlueBird

3
구문과는 별도로에서, 방법이보다 더 GIT_SSH_COMMAND="ssh -i ~/.ssh/thatuserkey.pem" git clone clone thatuser@myserver.com:/git/repo.git로버트 잭 윌의 대답은 ?
David Moles

6

지정된 식별 파일로 서명하려는 경로에 디렉토리가있는 경우 다음을 설정하여 .ssh / config 파일을 통해 특정 식별 파일을 사용하도록 지정할 수 있습니다 ControlPath.

host github.com
  ControlPath ~/Projects/work/**
  HostName github.com
  IdentityFile ~/.ssh/id_work
  User git

그런 다음 ssh주어진 작업 경로에서 git 명령을 수행 할 때 지정된 ID 파일을 사용합니다.


당신은 또한 속성을 설정할 수 있다는 것을 나중에 발견 ControlMaster auto하고 ControlPersist yes암호를 매번 다시 입력 할 필요가 없습니다 그래서. 이 기사
cristobal

3

아래와 같이 ~ / .ssh / config를 만들어야합니다

Host <Your bitbucket server>
User <userid>
Hostname <Your bitbucket server as above>
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa<file> This is your private key file

아래와 같은 권한

-rw------- $HOME/.ssh/config

자식 키에 공개 키를 추가하십시오 (cat ~ / .ssh / id_rsa_pub [또는 simillar name])

아래와 같이 git clone

git clone ssh://blahblah@blah.com/userid/test.git

3

많은 정답이 있지만 일부는 사전 관리 지식을 가정합니다.

나는 명시 적으로 강조하는 것이 중요하다고 생각 당신은 웹 URL을 복제하여 프로젝트를 시작하는 경우 - https://github.com/<user-name>/<project-name>.git
당신이 할 필요가 있는지 확인 url 아래 [remote "origin"]에서이 .git/config SSH를 URL로 변경되었습니다 (아래 코드 블록을 참조).

그 외에도 sshCommmand아래에 언급 된대로 추가해야 합니다.

user@workstation:~/workspace/project-name/.git$ cat config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sshCommand = ssh -i ~/location-of/.ssh/private_key -F /dev/null <--Check that this command exist
[remote "origin"]
    url = git@github.com:<user-name>/<project-name>.git  <-- Make sure its the SSH URL and not the WEB URL
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

자세한 내용은 여기를 참조 하십시오 .


1
왜 git이 ssh 키를 사용하지 않는지 알아 내려고 많은 시간을 보냈습니다. github이 복제 버튼에서 https URL을 기본값으로 제공하는 이유를 이해하지 못합니다.
Chakradar Raju

2

Git Bash가있는 Windows에서는 다음을 사용하여 저장소를 추가 할 수 있습니다. ssh-agent bash -c 'ssh-add "key-address"; git remote add origin "rep-address"' 예를 들어 ssh-agent bash -c 'ssh-add /d/test/PrivateKey.ppk; git remote add origin git@git.test.com:test/test.git'D 드라이브, 컴퓨터의 폴더 테스트에있는 개인 키. 또한 저장소를 복제하려는 경우 다음을 사용 git remote add origin하여 변경할 수 있습니다 .git clone .

이것을 Git Bash에 입력하면 암호를 묻습니다!

openssh 개인 키와 퍼티 개인 키가 서로 다르다는 것을 명심하십시오!

puttygen으로 키를 생성 한 경우 개인 키를 openssh로 변환해야합니다!


1

GIT_SSH 환경 변수를 사용할 수 있습니다. 그러나 ssh 및 옵션을 쉘 스크립트로 랩핑해야합니다.

man git커맨드 쉘에서 git manual : 을 참조하십시오 .


1

내가 사용 zsh하고 다른 키에로드 내 zsh을 쉘의 ssh-agent자동으로 내 컴퓨터에 다른 목적 (원격 서버 즉, 액세스)합니다. @Nick의 답변을 수정했으며 자주 새로 고쳐야하는 repos 중 하나에 사용하고 있습니다. (이 경우 dotfiles내가 작업하는 모든 컴퓨터에서 동일하고 최신 버전을 원합니다.)

bash -c 'eval `ssh-agent`; ssh-add /home/myname/.dotfiles/gitread; ssh-add -L; cd /home/myname/.dotfiles && git pull; kill $SSH_AGENT_PID'
  • ssh 에이전트 생성
  • 에이전트에 읽기 전용 키 추가
  • 디렉토리를 git repo로 변경하십시오.
  • 경우 cd원격 REPO에서의 repo에 디렉토리에 성공, 풀
  • 생성 된 ssh-agent를 종료하십시오. (나는 많은 요원들이 머무르기를 원하지 않을 것이다.)



0

SSH 포트 번호가 22 (기본값)가 아닌 경우 추가 Port xx~/.ssh/config

제 경우에는 (유사 론)

Host my_synology
    Hostname xxxx.synology.me
    IdentityFile ~/.ssh/id_rsa_xxxx
    User myname
    Port xx

그런 다음 config에서 Host title을 사용하여 복제하십시오. ( "my_synology". @chopstik의 "*"를 피하기 위해)

git clone my_synology:path/to/repo.git

0

당신이 나와 같다면 :

  • ssh 키를 체계적으로 유지하십시오

  • git clone 명령을 단순하게 유지하십시오

  • 임의의 수의 저장소에 대해 임의의 수의 키를 처리하십시오.

  • ssh 키 유지 보수를 줄이십시오.

키를 ~/.ssh/keys디렉토리 에 보관합니다 .

구성보다 규칙을 선호합니다.

코드는 법이라고 생각합니다. 간단할수록 좋습니다.

1 단계-별명 작성

이 별명을 쉘에 추가하십시오. alias git-clone='GIT_SSH=ssh_wrapper git clone'

2 단계-스크립트 작성

ssh_wrapper 스크립트를 PATH에 추가하십시오 .

#!/bin/bash
# Filename: ssh_wrapper

if [ -z ${SSH_KEY} ]; then
    SSH_KEY='github.com/l3x'  # <= Default key
fi
SSH_KEY="~/.ssh/keys/${SSH_KEY}/id_rsa"
ssh -i "${SSH_KEY}" "$@"

실시 예

github.com/l3x 키를 사용하십시오 :

KEY=github.com/l3x git-clone https://github.com/l3x/learn-fp-go

다음 예제는 github.com/l3x 키 (기본적으로) 도 사용합니다 .

git-clone https://github.com/l3x/learn-fp-go

bitbucket.org/lsheehan 키를 사용하십시오.

KEY=bitbucket.org/lsheehan git-clone git@bitbucket.org:dave_andersen/exchange.git

노트

ssh_wrapper 스크립트에서 기본 SSH_KEY를 대부분의 시간으로 변경하십시오. 이렇게하면 대부분 KEY 변수를 사용할 필요가 없습니다.

"이봐! 별명, 스크립트 및 일부 키 디렉토리로 진행되고있다"고 생각할 수도 있지만, 그것은 관습입니다. 거의 모든 내 워크 스테이션 (및 해당 서버)이 비슷하게 구성되어 있습니다.

여기서 목표는 내가 정기적으로 실행하는 명령을 단순화하는 것입니다.

Bash 스크립트, 별칭 등의 규칙은 일관된 환경을 조성하고 일을 단순하게 유지하는 데 도움이됩니다.

키스와 이름이 중요합니다.

더 많은 설계 팁을 보려면 내 책 에서 4 장 SOLID Design in Go 를 확인하십시오 . https://www.amazon.com/Learning-Functional-Programming-Lex-Sheehan-ebook/dp/B0725B8MYW

희망이 도움이됩니다. -렉스



0

이 방법의 문제점은 적어도 Windows에서 bash.exe로 실행할 때마다 휴면 상태로 유지 될 때마다 새 프로세스를 작성한다는 것입니다.

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

스케줄에 따라 syncig repo에 사용하려면 끝에 "&& ssh-agent -k"를 추가해야합니다.

다음과 같은 것 :

ssh-agent bash -c 'ssh-add C:/Users/user/.ssh/your_key; git -C "C:\Path\to\your\repo" pull && ssh-agent -k' 

ssh-agent -k는 프로세스가 완료되면 프로세스를 종료합니다.


0

방금 키를 추가하고 git clone을 다시 실행해야했습니다.

ssh-add ~/.ssh/id_rsa_mynewkey
git clone git@bitbucket.org:mycompany/myrepo.git

-1

이 문제에 대한 해결책을 찾는 동안 찾은 ssh 키 핵은 다음과 같습니다.

예를 들어 두 가지 키 세트가 있습니다.

key1, key1.pub, key2, key2.pub

이 키를 .ssh디렉토리 에 보관하십시오

이제 귀하 .bashrc또는 .bash_profile별칭 파일에 다음 명령을 추가하십시오

alias key1='cp ~/.ssh/key1 id_rsa && cp ~/.ssh/key1.pub id_rsa.pub'

alias key2='cp ~/.ssh/key2 id_rsa && cp ~/.ssh/key2.pub id_rsa.pub'

짜잔! 원할 때마다 키를 전환 할 수있는 바로 가기가 있습니다!

이것이 효과가 있기를 바랍니다.

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