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
답변
리포지토리 인증 에 의존하기 때문에 사용할 개인 키 를 알려주 는 직접적인 방법 은 없습니다 . 그러나 목표를 달성하는 몇 가지 방법이 여전히 있습니다.git
ssh
옵션 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_SSH
v0.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
모든 것이 작동합니다.