ssh가 잘못된 키를 제공하는 것을 어떻게 막을 수 있습니까?


33

(이것은 gitolite가 아닌 ssh의 문제입니다)

내 홈 서버 (우분투 12.04 서버, open-ssh)에서 gitolite를 구성했습니다. 리포지토리를 관리하기 위해 특별한 ID 파일을 원하므로 ssh를 통해 두 개의 다른 ID 키를 사용하는 내 호스트에 액세스해야합니다.

이것은 내 .ssh / config 파일의 내용입니다.

Host gitadmin.gammu.com
User            git
IdentityFile    /home/alvaro/.ssh/id_gitolite_mantra

Host git.gammu.com
User            git
IdentityFile    /home/alvaro/.ssh/id_alvaro_mantra

이것은 내 호스트 파일의 내용입니다.

# Git
127.0.0.1      gitadmin.gammu.com
127.0.0.1      git.gammu.com

따라서 "일반"계정으로 액세스하려면이 방법으로 gitolite와 통신 할 수 있어야합니다.

$ssh git.gammu.com 

이 방법으로 관리 계정으로 액세스 할 수 있습니다 :

$ssh gitadmin.gammu.com

일반 계정으로 액세스하려고하면 모든 것이 정상입니다.

alvaro@mantra:~/.ssh$ ssh git.gammu.com
PTY allocation request failed on channel 0
hello alvaro, this is gitolite 2.2-1 (Debian) running on git 1.7.9.5
the gitolite config gives you the following access:
    @R_ @W_    testing
Connection to git.gammu.com closed.

관리 계정으로 동일한 작업을 수행 할 때 :

alvaro@mantra:~$ ssh gitadmin.gammu.com
PTY allocation request failed on channel 0
hello alvaro, this is gitolite 2.2-1 (Debian) running on git 1.7.9.5
the gitolite config gives you the following access:
    @R_ @W_    testing
Connection to gitadmin.gammu.com closed.

관리 저장소가 표시되어야합니다. 자세한 옵션으로 ssh를 시작하면 :

ssh -vvv gitadmin.gammu.com 
...
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/alvaro/.ssh/id_alvaro_mantra (0x7f7cb6c0fbc0)
debug2: key: /home/alvaro/.ssh/id_gitolite_mantra (0x7f7cb6c044d0)
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/alvaro/.ssh/id_alvaro_mantra
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...

그것은 id_alvaro_mantra 키를 제공하고 있습니다.

-i 옵션으로 키를 지정할 때도 마찬가지입니다.

ssh -i /home/alvaro/.ssh/id_gitolite_mantra -vvv gitadmin.gammu.com
...
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/alvaro/.ssh/id_alvaro_mantra (0x7fa365237f90)
debug2: key: /home/alvaro/.ssh/id_gitolite_mantra (0x7fa365230550)
debug2: key: /home/alvaro/.ssh/id_gitolite_mantra (0x7fa365231050)
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/alvaro/.ssh/id_alvaro_mantra
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp 36:b1:43:36:af:4f:00:e5:e1:39:50:7e:07:80:14:26
debug3: sign_and_send_pubkey: RSA 36:b1:43:36:af:4f:00:e5:e1:39:50:7e:07:80:14:26
debug1: Authentication succeeded (publickey).
...

무슨 일이야? 뭔가 빠졌지 만 찾을 수 없습니다.

이들은 내 집 디렉토리의 내용입니다 :

-rw-rw-r--  1 alvaro alvaro  395 nov 14 18:00 authorized_keys
-rw-rw-r--  1 alvaro alvaro  326 nov 21 10:21 config
-rw-------  1 alvaro alvaro  137 nov 20 20:26 environment
-rw-------  1 alvaro alvaro 1766 nov 20 21:41 id_alvaromaceda.es
-rw-r--r--  1 alvaro alvaro  404 nov 20 21:41 id_alvaromaceda.es.pub
-rw-------  1 alvaro alvaro 1766 nov 14 17:59 id_alvaro_mantra
-rw-r--r--  1 alvaro alvaro  395 nov 14 17:59 id_alvaro_mantra.pub
-rw-------  1 alvaro alvaro  771 nov 14 18:03 id_developer_mantra
-rw-------  1 alvaro alvaro 1679 nov 20 12:37 id_dos_pruebasgit
-rw-r--r--  1 alvaro alvaro  395 nov 20 12:37 id_dos_pruebasgit.pub
-rw-------  1 alvaro alvaro 1679 nov 20 12:46 id_gitolite_mantra
-rw-r--r--  1 alvaro alvaro  397 nov 20 12:46 id_gitolite_mantra.pub
-rw-------  1 alvaro alvaro 1675 nov 20 21:44 id_gitpruebas.es
-rw-r--r--  1 alvaro alvaro  408 nov 20 21:44 id_gitpruebas.es.pub
-rw-------  1 alvaro alvaro 1679 nov 20 12:34 id_uno_pruebasgit
-rw-r--r--  1 alvaro alvaro  395 nov 20 12:34 id_uno_pruebasgit.pub
-rw-r--r--  1 alvaro alvaro 2434 nov 21 10:11 known_hosts

제공되지 않는 다른 키가 많이 있습니다 ... 왜 다른 키가 아닌 id_alvaro_mantra가 제공됩니까? 이해할 수 없습니다.

도움이 필요합니다. 어디서 볼지 모르겠습니다 ....

답변:


53

이것은 맨 페이지에 따라 예상되는 동작입니다 ssh_config.

 IdentityFile
         Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
         tion identity is read.  The default is ~/.ssh/identity for protocol
         version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
         protocol version 2.  Additionally, any identities represented by the
         authentication agent will be used for authentication.  

         [...]

         It is possible to have multiple identity files specified in configu‐
         ration files; all these identities will be tried in sequence.  Mul‐
         tiple IdentityFile directives will add to the list of identities
         tried (this behaviour differs from that of other configuration
         directives).

기본적으로 IdentityFiles를 지정 하면 SSH 에이전트가 이미 클라이언트에 제공 한 현재 목록에 키가 추가됩니다.

.ssh/config파일 맨 아래에서이 동작을 재정의 하십시오.

Host *
IdentitiesOnly yes

정말 고마워요. 나는 완전히 ssh-agent를 잊었다!
알바로 마케 다

3
또한 호스트 수준에서 지정할 수 있습니다. 마지막으로 수행 한 작업입니다. Host git.gammu.com User git IdentityFile /home/alvaro/.ssh/id_alvaro_mantra IdentitiesOnly yes`
Alvaro Maceda

2
@AlvaroMaceda가 정확합니다. IdentitiesOnly yesgitadmin.gammu.com 및 git.gammu.com Host항목에 추가하면 충분합니다. 다른 호스트에 영향을 줄 와일드 카드 항목을 만들 필요는 없습니다.
Bruno Bronosky

6

나에게 해결책은 명령을 사용하여 ssh 키 목록에 키를 추가하는 것이 었습니다.

ssh-add ~/.ssh/id_name_of_my_rsa_key

서버에 연결할 때 제공 될 수 있습니다. ssh를 추가 한 후 올바른 것으로 자동 인식되었습니다.

편집하다:

그러나 최근에 더 나은 해결책, 더 영구적 인 해결책은 다음과 같이 구성 파일 로 이동하여 ~/.ssh/config추가 IdentitiesOnly yes하는 것입니다.

Host github.com
  HostName github.com
    User git
      IdentityFile ~/.ssh/id_rsa
      IdentitiesOnly yes

감사합니다. 두 번째 방법은 제가해야 할 일이었습니다. 참고 사항 : HostName은 값이 Host의 값과 같으므로 과도하므로 ssh_config에서만 Host와 Match를 기준으로 그룹화하기 때문에 여러 수준 이상의 들여 쓰기는 의미가 없습니다.
dess

두 번째 접근법은 OS X Catalina에서 나를 위해 일한 유일한 방법이었습니다.
Daryl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.