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 gitserv로 Host 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 fetch와 git 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 : 내가 사용했습니다 dandv및 workuser내 예를 들어, "예를 들어 개인 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.