사용할 개인 키를 git에 알리는 방법은 무엇입니까?


646

ssh-i인증 할 때 사용할 개인 키 파일을 알려주 는 옵션이 있습니다.

-i identity_file

    RSA 또는 DSA 인증을위한 ID (개인 키)를 읽을 파일을 선택합니다. 기본값은 ~/.ssh/identity프로토콜 버전 1 및 ~/.ssh/id_rsa~/.ssh/id_dsa프로토콜 버전 2 신원 파일은 구성 파일 당 호스트 단위로 지정할 수 있습니다. 여러 -i옵션 (및 구성 파일에 지정된 여러 ID) 을 가질 수 있습니다.

디렉토리 git에 여러 개인 키가있는 시스템에서 사용할 개인 키 파일 을 알려주는 유사한 방법이 ~/.ssh있습니까?



답변:


671

에 다음 ~/.ssh/config을 추가하십시오.

host github.com
 HostName github.com
 IdentityFile ~/.ssh/id_rsa_github
 User git

이제 할 수 있습니다 git clone git@github.com:username/repo.git.

참고 : IdentityFile에 대한 권한이 400인지 확인하십시오. SSH는 명확하지 않은 방식으로 읽을 수있는 SSH 키를 거부합니다. 자격 증명 거부처럼 보일 것입니다. 이 경우 해결책은 다음과 같습니다.

chmod 400 ~/.ssh/id_rsa_github

117
다른 키로 동일한 호스트에 연결해야하는 경우 어떻게합니까?
Valentin Klinghammer

6
@Quelltextfabrik-다른 호스트를 사용하여 다른 섹션을 추가 할 수 있습니다 : nerderati.com/2011/03/…
Ben

1
@Cliff Nop, 내 맨 페이지 : " HostName: 로그인 할 실제 호스트 이름을 지정합니다. 호스트의 별명 또는 약어를 지정하는 데 사용할 수 있습니다." 내 ssh 버전은 openssh-6.7p1입니다.
Grissiom

11
설정 파일이 새로운 chmod 600 ~/.ssh/config
것이라면

2
@ValentinKlinghammer @Flimm의 대답에는이 질문에 대한 해결책이 있습니다. core.sshCommandgit 구성 을 사용 합니다. superuser.com/a/912281/162466
VasyaNovikov

345

환경 변수 GIT_SSH_COMMAND:

Git 버전 2.3.0부터 GIT_SSH_COMMAND다음과 같이 환경 변수를 사용할 수 있습니다 .

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" git clone example

참고 -i때로는 같이,이 경우, 당신은 SSH를 빈 설정 파일을 제공해야합니다, 설정 파일에 의해 대체 될 수 있습니다 :

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git clone example

구성 core.sshCommand:

Git 버전 2.10.0부터는 리포지토리별로 또는 전역 적으로이를 구성 할 수 있으므로 환경 변수를 더 이상 설정할 필요가 없습니다!

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

1
나는 수출했다 ,이 작품을 만들기 위해 환경 변수에 변수 즉 export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example", 다음git clone example
Abdull

7
@Abdull Bash에서 명령과 같은 줄에서 할당을 수행하면 해당 명령에 대해서만 환경 변수가 내보내집니다. 사용해보십시오 : example=hello /usr/bin/env | grep example.
Flimm

3
Git 2.10부터 Git 구성에 명령을 저장할 수 있습니다. stackoverflow.com/a/38474220/520162
eckes

2
@Noitidart /dev/null는 UNIX와 같은 운영 체제에서 유효한 파일 이름 일 뿐이며 Windows에서는 작동하지 않습니다.
Flimm

2
나를 위해 GIT_SSH_COMMAND내가 사용 때까지 작동하지 않았다 IdentitiesOnly이와 명령으로, : GIT_SSH_COMMAND="ssh -i ~/.ssh/mysubdir/id_rsa -o 'IdentitiesOnly yes'" git push.
Tyler Collier

111

리포지토리 인증 에 의존하기 때문에 사용할 개인 키 를 알려주 는 직접적인 방법없습니다 . 그러나 목표를 달성하는 몇 가지 방법이 여전히 있습니다.gitssh

옵션 1: ssh-agent

ssh-agent개인 키를 임시로 인증 하는 데 사용할 수 있습니다 .

예를 들면 다음과 같습니다.

$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'

옵션 2 : GIT_SSH_COMMAND

GIT_SSH_COMMAND환경 변수 (Git 2.3.0+) 를 사용하여 ssh 인수를 전달하십시오.

예를 들면 다음과 같습니다.

$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' \
  git clone user@host

이 모든 것을 한 줄에 입력 할 수 있습니다 .를 무시 $하고 제외하십시오 \.

옵션 3 : GIT_SSH

GIT_SSH대체 변수를 지정하기 위해 환경 변수를 사용하여 ssh 인수를 전달하십시오 ssh.

예를 들면 다음과 같습니다.

$ echo 'ssh -i ~/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH='./ssh' git clone user@host

참고 : 위의 행은 터미널에 붙여 넣어야하는 쉘 (터미널) 명령 행입니다. 그들은이라는 파일을 ssh만들고, 실행 가능하게 만들고 (간접적으로) 실행합니다.

참고 : GIT_SSHv0.99.4 (2005) 부터 사용 가능 합니다.

옵션 4 : ~/.ssh/config

~/.ssh/config개인 키의 위치를 ​​지정하려면 다른 답변에서 제안한대로 파일을 사용하십시오. 예 :

Host github.com
  User git
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa

1
//,이 질문 에서처럼 ssh-agent의 신원이 전달되면 어떻게됩니까? superuser.com/questions/971732/…
Nathan Basanese

1
나는이 게시물을 다시 포맷 할 수있었습니다 : IMO 이것은 가장 포괄적 인 답변입니다. 원래 디자인에서 빠른 스캔은 문제에 대한 하나의 복잡한 솔루션을 설명하는 게시물을 제안 했으므로 놓쳤습니다.
Alberto

3
$ ssh-agent sh -c 'ssh-add ~/.ssh/id_rsa; git fetch user@host'다른 일이 없을 때 나를 위해 일했습니다. 명성.
Daniel Dewhurst

1
내가 사용했다 ~/.ssh/config, 방법을 ENV ... 나를 위해 작동하지 않았다 바르
그렉 Dubicki

1
GIT_SSHv0.99.4 (2005 년 8 월) 부터 사용할 수 있으므로 기본적으로 Git이 존재하기 때문에 (2005 년 4 월)
도미니크

32

ssh원하는 인수로 호출하는 스크립트를 작성하고 스크립트 의 파일 이름을에 넣으십시오 $GIT_SSH. 또는 구성을에 넣으십시오 ~/.ssh/config.


2
이 작업을 수행하는 방법에 대한 또 다른 설명 .
Sithsu

1
~/.ssh/config가 갈 방법입니다.
hek2mgl

ssh 키 인증 만 허용하는 서버 (B)로 푸시 푸시하는 머신 (A)에서 작업합니다. 내가 직접 작업 할 때 (A) 내 ~ / 스푸핑 / 구성 설정이 완벽하게 잘 작동하는 동안 그 기계 나 다른 위치 (C)에서 로그인하면, 그렇지 않습니다. $GIT_SSH및 스크립트를 사용 하여이 문제를 해결했습니다. 감사!
bsumirak

18

git을 실행할 때마다 환경 변수를 지정하지 않으려는 경우, 다른 래퍼 스크립트를 원하지 않거나 ssh-agent (1)를 실행하지 않거나 /이를 위해 다른 패키지를 다운로드하지 않으려면 git을 사용하십시오. -remote-ext (1) 외부 운송 :

$ git clone 'ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git'
Cloning into 'repository'
(...)
$ cd repository
$ git remote -v
origin  ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git (fetch)
origin  ext::ssh -i $HOME/.ssh/alternate_id git.example.com %S /path/to/repository.git (push)

나는이 솔루션을 다음과 같은 이유로 우수하다고 생각합니다.

  • 저장소 / 원격에 따라 다릅니다.
  • 랩퍼 스크립트 팽창 방지
  • SSH 에이전트가 필요하지 않음-무인 클론 / 푸시 / 풀을 원하는 경우에 유용합니다 (예 : cron)
  • 확실히, 외부 도구가 필요하지 않습니다

2
이 답변은 Chef의 git리소스가 리포지토리 별 배포 키를 사용하여 개인 Github 리포지토리에서 복제 / 페치 하도록 강제하는 데 필요한 것 입니다. 환경 / 스크립트 기반 방법에 비해이 방법의 추가 장점은 키 경로가 작업 저장소의 구성으로 인코딩되므로 초기 복제 및 후속 페치 / 푸시 모두에서 동일한 키를 사용한다는 것입니다.
Adam Franco

2
와! 이것은 대단하고 이것에 대해 몰랐습니다. 꼭두각시 환경에서도 도움이되는 답변에 감사드립니다 .ssh/config.
gf_

1
이 솔루션은 --recursive 플래그와 함께 작동하지 않습니다. 서브 모듈은 지정된 키를 사용하여 페치되지 않으므로 인증이 필요한 경우 실패합니다.
Daniele Testa

1
각 하위 모듈은 자체 리모콘 세트가있는 완전히 다른 저장소입니다. 그것들은 편의를 위해 Git에 의해 붙어 있지만 하위 모듈에 대한 원격 장치가 부모 저장소의 원격 장치에 묶여 있지는 않습니다. 부모의 재귀가 작동하려면 하위 모듈 의 ext전송을 사용하여 원격을 설정해야합니다 .
flaviovs

2
다음 오류가 발생 fatal: transport 'ext' not allowed하면를 통해 ext 프로토콜을 허용 목록에 추가해야합니다 export GIT_ALLOW_PROTOCOL=ext. 기본적으로 git-remote-ext 원격 도우미 ( "ext :: ssh example.com % S foo / repo"URL 지원)는 임의의 명령 실행을 허용합니다. 사용자가 항상 git에 전달하는 URL을보고 신뢰하기 때문에 이것은 항상 걱정할 필요가 없습니다. 그러나 .gitmodules 파일을 통해 git 하위 모듈을 사용하면 공격자가 클라이언트에게 임의의 git URL을 가져 오도록 요청할 수 있습니다. hackerone.com/reports/104465
Gomino

18

다음 ~/.ssh/config과 같이 사용자 정의 호스트 구성을 사용하십시오 .

Host gitlab-as-thuc  
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa.thuc
    IdentitiesOnly yes

그런 다음 다음과 같이 사용자 정의 호스트 이름을 사용하십시오.

git remote add thuc git@gitlab-as-thuc:your-repo.git  

2
집과 직장에 대한 별도의 GitHub 계정이 있기 때문에 이것이 내가 찾던 답입니다. 방금 Host work.github.com HostName github.com IdentityFile ~/.ssh/work작업 저장소를 복제 할 때마다을 설정 한 다음 "github.com"을 "work.github.com"으로 바꿨습니다. 여전히 "github.com"에 연결되지만 기본이 아닌 키 페어를 사용합니다.
Mikkel

1
자세한 내용은 URL ( " itblog.study.land이 / ..." ) :( 더 이상 작동하지 않습니다
칼 Smotricz

원래는 여기로 이사했다 @CarlSmotricz : medium.com/@thucnc/...을
thucnguyen

4
드디어!!! 이 답변은 실제로 ~/.ssh/config파일에 넣은 것을 활용하는 방법을 보여줍니다 . 다른 모든 대답은 원점을 추가 할 때 호스트를 설정하는 방법을 놓치므로 git이 올바른 키 파일을 자동으로 사용할 수 있습니다. 감사합니다!!
BrianVPS

1
니스, 그것이 내가보고 있었던 것 :)
Lucas D' Avila

15

나의 투쟁 후에 $GIT_SSH나는 나를 위해 일한 것을 나누고 싶다.

내 예제를 통해 개인 키가 있다고 가정합니다./home/user/.ssh/jenkins

피해야 할 오류 : GIT_SSH 값에 옵션이 포함됨

$ export GIT_SSH="ssh -i /home/user/.ssh/jenkins"

또는 git은 값을 file로 실행하려고 시도하므로 비슷한 것이 무엇이든 실패 합니다 . 따라서 스크립트를 작성해야합니다.

$ GIT_SSH 스크립트의 실제 예 /home/user/gssh.sh

스크립트는 다음과 같이 호출됩니다.

$ $GIT_SSH [username@]host [-p <port>] <command>

샘플 스크립트 작업은 다음과 같습니다.

#!/bin/sh
ssh -i /home/user/.ssh/jenkins $*

$*말에, 그것의 중요한 부분입니다.

더 안전한 대안은 기본 구성 파일의 모든 항목과 충돌을 방지하고 사용할 포트를 명시 적으로 언급하는 것입니다.

#!/bin/sh
ssh -i /home/user/.ssh/jenkins -F /dev/null -p 22 $*

스크립트가에 있다고 가정하면 /home/user/gssh.sh다음을 수행해야합니다.

$ export GIT_SSH=/home/user/gssh.sh

모든 것이 작동합니다.


감사. 참고 : 인수에 공백이 있으면 전자가 올바르게 동작하므로 패스 스루 인수에는 $ * 대신 "$ @"을 사용하십시오.
Piotr Findeisen

@PiotrFindeisen 참고해 주셔서 감사합니다. 그러나 나는 그것을 완전히 이해하지 못합니다 .zsh에서는 문자열을 공백으로 한 조각으로 유지하는 데 도움이되지만 bash에서는 그렇지 않습니다. 더 설명하거나 설명 할 수 있습니까? 맹목적으로 수정을 추가하고 싶지 않습니다.
Jan Vlcinsky

답의 전반부를 제거해야합니다. 아무도 효과가없는 솔루션에 관심이 없으며 맨 아래에 정답을 모호하게하는 독서를 낭비하고 훌륭하게 작동합니다.
Cerin

@Cerin 당신이 "피해야 할 오류"를 제거하는 것을 의미한다면 나는 거기에 그것을 유지할 것이다. 피해야 할 일반적인 함정을 공유하며 매우 짧습니다. 나는 누군가가 모든 것을 변수로 제공함으로써 솔루션을 최적화하려고 시도 할 것이라고 확신한다.
Jan Vlcinsky

5

자신 만의 래퍼를 만드는 대신 ssh-ident를 사용할 수 있습니다.

https://github.com/ccontavalli/ssh-ident 에서 자세한 내용을 읽을 수 있습니다.

여러 로그인 세션, xterms 또는 NFS 공유 홈에서도 처음 필요할 때 ssh 키를 한 번로드합니다.

작은 구성 파일을 사용하면 필요한 작업에 따라 다른 키를 자동으로로드하고 다른 에이전트 (에이전트 전달 용)로 분리 된 상태로 유지할 수 있습니다.


5

별도의 github 계정이 필요한 클라이언트가 있습니다. 그래서이 프로젝트 하나에 만 별도의 키를 사용해야했습니다.

내 해결책은 이것을 내 .zshrc / .bashrc에 추가하는 것이 었습니다.

alias infogit="GIT_SSH_COMMAND=\"ssh -i ~/.ssh/id_specialkey\" git $@"

해당 프로젝트에 git을 사용할 때마다 "infogit"을 git으로 바꿉니다.

infogit commit -am "Some message" && infogit push

저에게는 기억하기가 더 쉽습니다.


4

그래서 GIT_SSH env 변수를로 설정했습니다 $HOME/bin/git-ssh.

내 repo 구성에서 사용할 ssh ID를 지정하도록 지원하기 위해 내 ~/bin/git-ssh파일은 다음과 같습니다.

#!/bin/sh
ssh -i $(git config --get ssh.identity) -F /dev/null -p 22 $*

그런 다음 전역 git 구성 설정이 있습니다.

$ git config --global ssh.identity ~/.ssh/default_id_rsa

그리고 git 저장소 내에서 로컬 ssh.identitygit config 값을 설정할 수 있습니다 .

$ git config --local ssh.identity ~/.ssh/any_other_id_rsa

짜잔!

각 ID마다 다른 이메일 주소를 가질 수 있다면 이메일 주소 다음에 키 이름을 지정한 다음 git config의 user.email을 사용하여 다음 ~/bin/git-ssh과 같이 키 선택을 수행 할 수 있기 때문에 훨씬 간단 해집니다 .

#!/bin/sh
ssh -i $HOME/.ssh/$(git config --get user.email) -F /dev/null -p 22 $*

2

내 해결책은 다음과 같습니다.

스크립트를 작성하십시오.

#!/bin/bash
KEY=dafault_key_to_be_used
PORT=10022 #default port...
for i in $@;do
   case $i in
    --port=*)
        PORT="${i:7}";;
    --key=*)KEY="${i:6}";;
   esac
done
export GIT_SSH_COMMAND="ssh -i $HOME/.ssh/${KEY} -p ${PORT}"
echo Command: $GIT_SSH_COMMAND

그런 다음 var run을 변경해야 할 때 :

. ./thescript.sh [--port=] [--key=]

여분의 점을 잊지 마세요! 이것은 스크립트가 환경 변수를 설정하게합니다! --key 및 --port는 선택 사항입니다.


2

일반적 ~/.ssh/config으로이 용도로 사용하려고합니다 . 서버 주소를 사용하려는 키와 다음과 같이 간단히 연결하십시오.

Host github.com
  IdentityFile ~/.ssh/id_rsa.github
Host heroku.com
  IdentityFile ~/.ssh/id_rsa.heroku
Host *
  IdentityFile ~/.ssh/id_rsa

Host *는 모든 서버를 ~/.ssh/id_rsa나타내므로 사용할 기본 키로 설정 하는 데 사용합니다.


2

@shellholic 과이 SO 스레드 를 몇 가지 티크로 빌드합니다. 예를 들어 GitHub를 사용하고 개인 키가 있고 ~/.ssh/github(그렇지 않으면 이 SO 스레드 참조 ) 공개 키를 GitHub 프로필에 추가했다고 가정합니다 (그렇지 않으면 GitHub의 도움말 참조 ).

필요한 경우 새 SSH 구성 파일을 작성 ~/.ssh/config하고 권한을 400으로 변경하십시오.

touch ~/.ssh/config
chmod 600 ~/.ssh/config

이것을 ~/.ssh/config파일에 추가 하십시오 :

Host github.com
    IdentityFile ~/.ssh/github
    IdentitiesOnly yes

이미 원격 설정이되어있는 경우 삭제하고 싶을 경우 사용자 이름과 비밀번호를 입력하라는 메시지가 계속 표시 될 수 있습니다.

git remote rm origin

그런 다음 git 저장소에 원격을 추가하고 사용자 이름 앞에 콜론을 확인하십시오.

git remote add origin git@github.com:user_name/repo_name.git

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

git push origin master
git pull origin 

이 SO 스레드 에서 @HeyWatchThis IdentitiesOnly yes는 각 프로토콜의 기본 파일 이름과 일치하는 ID 파일을 보내는 SSH 기본 동작을 방지하기 위해 추가 를 제안했습니다 . 자세한 정보 및 참조는 해당 스레드를 참조하십시오.


이것은 나의 실수였다 : "이미 원격 설정이되어 있다면 ...". 고마워 !!!
Allan Andrade

일반적인 실수 --- 이것이 답입니다
Goddard

1

사용 ssh-agent하고 ssh-add명령하십시오.

# create an agent
ssh-agent

# add your default key
ssh-add ~/.ssh/id_rsa

# add your second key
ssh-add ~/.ssh/<your key name>

위의 명령을 실행 한 후 두 키를 동시에 사용할 수 있습니다. 그냥 입력

git clone git@github.com:<yourname>/<your-repo>.git

저장소를 복제합니다.

머신을 재부팅 한 후 위의 명령을 실행해야합니다.


에이전트 생성 방법
Srikrushna

0

git 버전 2.16을 사용하고 있으며 구성이나 수정 명령이 아닌 단일 스크립트가 필요하지 않습니다.

  • 내 개인 키를 .ssh / id_rsa에 복사했습니다.
  • 권한을 600으로 설정

그리고 git은 키를 자동으로 읽습니다. 나는 아무 것도 묻지 않고 오류를 던지지 않습니다. 잘 작동합니다.


질문은 " ~/.ssh디렉토리 에 여러 개인 키가있는 시스템"에 관한 것 입니까?
Scott

0

질문이 요청하지는 않지만 대해 동일한 문제를 해결하려는 다른 사람들을 위해이 답변을 포함하고 있습니다.

gitlab 솔루션

접근 방식을 사용해 보았지만 git 문서 조차도 ~/.ssh/config간단한 경우 이외의 용도로 사용 하는 것이 좋습니다 . 필자의 경우에는 서버로 푸시하고 있는데 특정 사용자로서 그렇게하고 싶었습니다 . 사용자 이름이 아닌 중에 정의됩니다 . 일단 구현되면 다음을 수행합니다.git

~/myrepo> git mycommit -m "Important Stuff"
~/myrepo> git mypush
[proceed to enter passphrase for private key...]

설정

필자의 경우 의 위치를 ​​상기하십시오 /myfolder/.ssh/my_gitlab_id_rsa.

에 항목을 추가하십시오 ~/.ssh/config.

Host gitlab-delegate
    HostName gitlab.mydomain.com
    User git
    IdentityFile /myfolder/.ssh/my_gitlab_id_rsa
    IdentitiesOnly yes

~/.gitconfig다음에 추가하십시오 .

mypush = "!f() { \
           path=$(git config --get remote.origin.url | cut -d':' -f2); \
           branch=$(git rev-parse --abbrev-ref HEAD); \
           git remote add gitlab_as_me git@gitlab-delegate:$path && \
           git push gitlab_as_me $branch && \
           git pull origin $branch; \
           git remote remove gitlab_as_me; \
         }; f"

보너스 로이 사용하여 특정 사용자동일한 호스트에서 커밋을 수행합니다 .

mycommit = "!f() { \
             git -c "user.name=myname" -c "user.email=myname@mysite.com" commit \"$@\"; \
           }; f"

설명

위의 모든 내용은 관련 리모컨이 origin있고 해당 지점이 현재 체크 아웃되어 있다고 가정합니다 . 참고로 나는 해결해야 할 몇 가지 항목을 발견했습니다.

  • 솔루션에는 새 리모컨을 만들어야하며 로그 트리에gitlab_as_me 여분의 리모컨이 매달려 있는 것을 좋아하지 않으므로 완료되면 제거합니다.
  • 리모컨을 만들려면 즉시 리모컨의 URL을 생성해야합니다-gitlab의 경우 간단한 bash 으로 달성했습니다
  • 푸시를 수행 할 때 푸시 gitlab_as_me하려는 브랜치에 대해 구체적이어야합니다.
  • 푸시를 수행 한 후 해당 지역의 origin포인터가 일치하기 위해 "업데이트"해야 gitlab_as_me합니다 (이 git pull origin $branch이 작업을 수행)

0

git 계정이 여러 개이고 다른 ssh 키를 원할 때

ssh 키를 생성하려면 동일한 단계를 수행해야하지만

ssh-keygen -t ed25519 -C "your-email-id@gmail.com" 

저장할 경로를 입력하십시오 (예 : my-pc / Desktop / .ssh / ed25519)

공개 키를 gitlab 에 추가 하십시오 (gitlab 에 ssh 키를 추가하는 방법 )

아래 쉼표를 사용하여 새로운 ssh ID를 사용해야합니다.

ssh-add ~/my-pc/Desktop/.ssh/ed25519

(1) 누군가를 인용하고 있습니까? 그렇다면 출처를 확인하십시오. 그렇지 않은 경우 따옴표 형식을 사용하지 마십시오. (2)“ed25519”란 무엇입니까? ………………………… 의견에 응답하지 마십시오.  명확하고 완전하게 답변을 편집 하십시오.
스콧

0
    # start :: how-to use different ssh identity files

    # create the company identity file
    ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
    # save private key to ~/.ssh/id_rsa.corp, 
    cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys

    # create your private identify file
    ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
    # save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
    cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys

    # clone company internal repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@git.in.corp.com:corp/project.git

    export git_msg="my commit msg with my corporate identity, explicitly provide author"
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push 
    # and verify 
    clear ; git log --pretty --format='%h %ae %<(15)%an ::: %s

    # clone public repo as follows
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git clone git@github.com:acoolprojectowner/coolproject.git

    export git_msg="my commit msg with my personal identity, again author "
    git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
    GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    git push ; 
    # and verify 
    clear ; git log --pretty --format='%h %ae %<(15)%an ::: %s

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