Programing

GIT_SSH 오류를 사용하는 사용자 지정 SSH로 Git 복제

즐거운 cyworld 2021. 1. 10. 16:46
반응형

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

반응형