ssh 옵션을 git clone에 전달


103

git clone저장소 호스트의 키를 확인하는 ssh없이 실행하려고합니다 . 다음과 같이 ssh에서 할 수 있습니다.

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host

git clone 명령에 동일한 ssh 옵션을 전달하는 방법이 있습니까?

편집 : ~/.ssh/config해당 컴퓨터에서 수정할 수없는 제한 이나 다른 파일이 있습니다.


2
당신이하려고하는 것은 매우 위험하므로 그렇게해서는 안됩니다. 대부분의 상황에서 원격 SSH 서버의 ID가 나쁜 생각이라면 확인을 비활성화합니다. SSH를 사용하여 얻은 모든 보안을 효과적으로 비활성화하고 중간자 (man-in-the-middle) 공격에 노출됩니다.
aef jul.

1
실제로 이것은 종종 정확히 원하는 작업입니다. 내부 저장소가 있습니다. 누군가 그것을 속일 수 있다면, 당신은 문제에 처한 것입니다. 전혀 "매우 위험"하지 않습니다. 실제로 호스트 키의 대역 외 검사를 얼마나 자주 수행합니까? (해야합니다).
Graham Nicholls

답변:


47

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

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

Host항목은 명령 줄에서 지정하는 것입니다 무엇이며,이 HostName실제 호스트 이름입니다. 동일하거나 Host항목이 별명 일 수 있습니다. User지정하지 않는 경우 항목은 사용되는 user@명령 줄에.

명령 줄에서이를 구성해야하는 경우 GIT_SSH옵션이 포함 된 스크립트를 가리 키도록 환경 변수를 설정 합니다.


4
해당 컴퓨터의 파일을 수정할 수 없다는 것을 잊었습니다. 그렇지 않으면 솔루션이 작동합니다.
Daniel

28
GIT_SSH환경 변수를 사용하십시오 .
Josh Lee

152

최근에 출시 된 git 2.3은 명령어 WITH 매개 변수를 정의하는 데 사용할 수있는 새로운 변수 "GIT_SSH_COMMAND"를 지원합니다.

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host

$GIT_SSH_COMMAND는 우선권을 $GIT_SSH가지며 추가 인수를 포함 할 수있는 쉘에 의해 해석됩니다.


앞에 새 줄이 있어야합니까, git clone아니면 코드가 맞습니까?
Tomáš Zato-Monica 복원

7
이것은 정확해야합니다. 줄 바꿈없이 다음 명령에 대해 변수를 설정해야합니다. 줄 바꿈을 추가하면 변수를 내 보내야하며, 그 다음에도 작동합니다.
Boris

고마워요, 저는 이틀 동안이 문제를 해결했습니다!
James Gentes

대박! 감사합니다.
Jasper Blues

내가 믿는 git 1.9 버전에서는 작동하지 않을 것입니다. git 1.9에 대한 대체 솔루션이
lazarus

33

다른 키를 지정하기 위해 만들어진 또 다른 옵션은 git config core.sshCommandgit 2.10 + (Q3 2016)입니다.

이것은 Boris답변에 설명 된 환경 변수의 대안입니다. )

참조 3c8ede3 커밋 에 의해 (2016년 6월 26일를) 응웬 타이 응옥 두이 ( pclouds) .
(의해 병합 - Junio C 하마노 gitster-dc21164 커밋 2,016 7 월를 19)

core.sshCommand저장소 당 사용할 GIT_SSH_COMMAND 값을 지정하기 위해 새 구성 변수 가 추가되었습니다.

유사 $GIT_ASKPASS또는 $GIT_PROXY_COMMAND, 우리는 또한 config 파일에서 읽을 먼저 다시 가을 $GIT_SSH_COMMAND.

이는 동일한 호스트 (예 : github)를 대상으로하는 다른 개인 키를 선택하는 데 유용합니다.

core.sshCommand:

이 변수가 설정되어있는 경우 git fetchgit push대신 지정된 명령을 사용합니다 ssh그들은 원격 시스템에 연결해야 할 때.
명령은 GIT_SSH_COMMAND환경 변수와 동일한 형식 이며 환경 변수가 설정되면 무시됩니다.

이는 다음 git clone이 될 수 있음을 의미합니다 .

cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on
git clone host:repo.git

당신이 그것을 적용 할 경우 모두 같은 REPOS user1300959가 추가 코멘트에 , 당신은 글로벌 구성을 사용합니다.

git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

2
당신이 가지고 있기 때문에 아직 repo가 ​​없을 가능성이 더 큽니다.- git clone이 경우 git ssh 명령을 전역 적으로 구성 할 수 있습니다.git config --global core.sshCommand ...
iurii

@ user1300959 좋은 지적, 감사합니다. 더 많은 가시성을 위해 답변에 귀하의 의견을 포함했습니다.
VonC

이것이 최고의 답변입니다.
MikeSchinkel

마지막 부분에서 아포스트로피가 부족합니다
Luigi Lopez

@LuigiLopez 대답을 편집 할 수 있습니까? 편집 내용을 검토하겠습니다.
VonC

21

다음은 GIT_SSH 변수를 사용하여 ssh 인수를 전달하는 방법에 대한 까다로운 예입니다.

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

참고 : 위 줄은 터미널에 붙여 넣어야하는 터미널 명령 줄입니다. ssh 파일을 생성 하고 실행 가능하게 만들고 실행합니다.

개인 키 옵션을 전달하려면 사용할 개인 키를 git에 알리는 방법을 확인하십시오 . .


좋은! 질문 : 모두 $*"$@"작업에 보인다. "$@"다른 하나는 더 이상 사용되지 않는 것처럼 보이기 때문에 일반적으로를 사용합니다. $*이 경우 선호하는 이유가 있습니까?
mh8020

16

시스템 수준 설정에 영향을주지 않는 저장소 수준 구성

이미 사용 가능한 답변을 통합하여 아래 단계를 선택합니다. 이렇게하면 구성 변경이 시스템 수준에서 영향을받지 않고 작업중인 저장소에만 영향을줍니다. 내 경우에는 공유 Bamboo 에이전트에서 스크립트를 실행해야하므로이 작업이 필요합니다.

1. GIT_SSH_COMMAND접근 방식을 사용 하여 저장소를 복제합니다 .

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url

2. 복제 후 저장소 디렉토리로 이동합니다.

cd repo-dir

3. core.sshCommand모든 향후 호출이 평소와 같이 git 명령으로 실행될 수 있도록 구성을 설정하지만 내부적으로 제공된 git 옵션을 사용합니다.

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

1
core.sshCommand위에서 언급 한,의 좋은 사용 . 찬성.
VonC

5

나는 버전> = 2.3으로 git을 업데이트하고 사용하는 GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host것이 내기 옵션 이라고 생각 하지만 가능하지 않은 경우 @ josh-lee가 좋은 옵션을 제공했지만 ssh 구성 파일을 들여 쓰기하여 답변을 업데이트하십시오.

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

0

이 문제는 Window 컴퓨터에서 다음 단계를 수행하여 수정되었습니다.

  • C : \ Users \ username.ssh 폴더 아래에 구성 파일을 만듭니다.

  • 구성 파일에 다음 행을 추가하십시오.

    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
  • 그런 다음 다시 시도하십시오.

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