GIT_SSH 오류를 사용하는 사용자 지정 SSH로 Git 복제
사용자 지정 SSH 명령을 사용하여 Git 리포지토리를 복제하려고합니다. GIT_SSH 환경에서 SSH 명령을 설정했습니다.
export GIT_SSH="/usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key"
.
하지만 이전 명령을 실행 한 후에
git clone git@bitbucket.org:uname/test-git-repo.git
, 다음과 같은 이상한 오류가 발생합니다.
error: cannot run /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key
fatal: unable to fork
이 문제를 해결하도록 도와 주시겠습니까?
GIT_SSH
환경 변수에 옵션을 제공 할 수 없습니다 . 로부터 git
매뉴얼 페이지
GIT_SSH
If this environment variable is set then git fetch and git push will use this command instead of ssh when they need to connect
to a remote system. The $GIT_SSH command will be given exactly two arguments: the username@host (or just host) from the URL
and the shell command to execute on that remote system.
To pass options to the program that you want to list in GIT_SSH you will need to wrap the program and options into a shell
script, then set GIT_SSH to refer to the shell script.
한 가지 옵션은 .ssh/config
적절한 구성으로 파일에 스탠자를 추가하는 것입니다 .
Host bitbucket.org
StrictHostKeyChecking no
IdentityFile /home/me/my_private_key
또 다른 옵션은 GIT_SSH
원하는 작업을 수행하는 쉘 스크립트 를 가리키는 것입니다. 예를 들어, 다음을 /home/me/bin/bitbucket_ssh
입력하십시오.
#!/bin/sh
exec /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key "$@"
그리고 포인트 GIT_SSH
에서 /home/me/bin/bitbucket_ssh
.
.ssh/config
가능한 경우 사용하는 것을 선호 합니다. 이렇게하면 각 원격에 대해 대상별 스크립트를 만들 필요가 없기 때문입니다.
git 2.3+ (2015 년 1 분기)부터는 처음에 시도한 것이 새로운 환경 변수로 작동합니다 GIT_SSH_COMMAND
.
Thomas Quinot의 커밋 3994276 을 참조하십시오 ( quinot
) :
git_connect
: ssh 쉘 명령 설정 GIT_SSH_COMMAND
GIT_SSH
추가 매개 변수를 전달해야하는 경우 래퍼 스크립트를 설치하는 것은 비현실적 일 수 있습니다 .
명령 줄 인수를 포함하여 실행할 셸 명령을 지정하는 대체 방법을 제공합니다.GIT_SSH_COMMAND
환경 변수 는 셸로 전달GIT_SSH
되지만 이와 비슷하게 작동 합니다 .PuTTY의 plink / tortoiseplink를 사용하는 경우 매개 변수를 수정하는 특수 회로는 다음을 사용할 때만 활성화됩니다
GIT_SSH
. 를 사용하는 경우GIT_SSH_COMMAND
기본 ssh 구현을 호출하기 전에 필요한 매개 변수를 조정하는 것은 의도적으로 사용자에게 맡겨집니다.
GIT_SSH_COMMAND
:
이러한 환경 변수 중 하나가 설정되면 '
git fetch
'및 'git push
'는ssh
원격 시스템에 연결해야 할 때 ' ' 대신 지정된 명령 을 사용합니다.
명령에는 정확히 2 개 또는 4 개의 인수가 제공됩니다.
- URL 의 '
username@host
'(또는 'host
'만) 및 해당 원격 시스템에서 실행할 쉘 명령, 선택적으로 앞에 '-p
'(문자 그대로) 및port
기본SSH
포트가 아닌 다른 것을 지정하는 경우 URL 의 ' '
$GIT_SSH_COMMAND
은보다 우선$GIT_SSH
하며 쉘에 의해 해석되어 추가 인수를 포함 할 수 있습니다.
$GIT_SSH
반면에 프로그램의 경로 일 뿐이어야합니다 (추가 인수가 필요한 경우 래퍼 쉘 스크립트 일 수 있음).
ssh-agent 사용
ssh-agent bash -c 'ssh-add /home/me/my_private_key; git clone git@bitbucket.org:uname/test-git-repo.git'
바탕 larsk 의 대답 과 VonC 의 대답은 , 당신은 만들 수 git_ssh.sh
와 같은 스크립트를 :
#!/bin/sh
# Workaround: GIT_SSH_COMMAND isn't supported by Git < 2.3
exec ${GIT_SSH_COMMAND:-ssh} "$@"
그런 다음 다음 git
과 같이 명령을 호출하십시오 .
export GIT_SSH_COMMAND="/usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key"
export GIT_SSH=path/to/git_ssh.sh
git ...
작동 방식 :
Git v2.3 + $GIT_SSH_COMMAND
에서는 우선권을 $GIT_SSH
갖지만 이전 버전은 전혀 존중하지 않습니다 $GIT_SSH_COMMAND
.
$GIT_SSH
can hold only a path to the ssh
command on the system. It can't pass extra command line arguments to that command, so how can we pass extra arguments to ssh
?
A workaround is to create a script that includes the ssh
command and its extra arguments. This is exactly what the git_ssh.sh
is all about: Since we already set $GIT_SSH_COMMAND
to be /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key
, it is exactly what we need to exec
, and the "$@"
is here to pass the arguments passed to git_ssh.sh
by Git itself to the $GIT_SSH_COMMAND.
The ${...:-ssh}
part, while not strictly needed is a nice touch that will make $GIT_SSH_COMMAND
default to the ssh
command, and thus setting GIT_SSH=git_ssh.sh
will not break a normal git
execution.
As added value, this script is totally ignored by Git v2.3+, and the $GIT_SSH_COMMAND
is used directly in this case.
You can supply any keyfile you wish to use with the Git command like this:
$ PKEY=~/.ssh/keyfile.pem git clone git@github.com:me/repo.git
or this:
$ git.sh -i ~/.ssh/keyfile.pem clone git@github.com:me/repo.git
I answered the same question here: https://stackoverflow.com/a/15596980
See link for details.
ReferenceURL : https://stackoverflow.com/questions/14220929/git-clone-with-custom-ssh-using-git-ssh-error
'Programing' 카테고리의 다른 글
기존 클래스가있을 때 인터페이스가 다중 상속의 필요성을 대체 할 수있는 방법 (0) | 2021.01.10 |
---|---|
Sublime2 (또는 textMate?)의 범위 목록은 어디에서 찾을 수 있습니까? (0) | 2021.01.10 |
iPhone X의 상단 막대 높이는 얼마입니까? (0) | 2021.01.10 |
HTML 5 대 XHTML 1.0 전환? (0) | 2021.01.10 |
릴리스 빌드가 디버그 빌드와 다르게 실행되는 몇 가지 이유는 무엇입니까? (0) | 2021.01.10 |