사용할 개인 키를 git에 알리는 방법은 무엇입니까? ID (개인 키)를 읽을 파일을 선택합니다. 기본값은

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

-i identity_file

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

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



답변

에 다음 ~/.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


답변

환경 변수 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


답변

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


답변

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


답변

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)
  • 확실히, 외부 도구가 필요하지 않습니다

답변

다음 ~/.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


답변

나의 투쟁 후에 $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

모든 것이 작동합니다.