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 fetch와 git 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.