Jak mogłem przestać ssh oferować zły klucz?

33

(Jest to problem z ssh, nie z gitolitem)

Skonfigurowałem gitolite na moim serwerze domowym (serwer Ubuntu 12.04, open-ssh). Chcę specjalnego pliku tożsamości do administrowania repozytoriami, więc muszę uzyskać dostęp przez ssh do mojego hosta używającego dwóch różnych kluczy tożsamości.

Oto zawartość mojego pliku .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

To jest zawartość mojego pliku hosts:

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

Powinienem więc móc komunikować się z gitolite w ten sposób, aby uzyskać dostęp do konta „normalnego”:

$ssh git.gammu.com 

i w ten sposób uzyskać dostęp za pomocą konta administracyjnego:

$ssh gitadmin.gammu.com

Kiedy próbuję uzyskać dostęp do zwykłego konta, wszystko jest w porządku:

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.

Kiedy robię to samo z kontem administracyjnym:

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.

Powinien pokazywać repozytorium administracyjne. Jeśli uruchomię ssh z pełną opcją:

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
...

Oferuje klucz id_alvaro_mantra i nie powinien !!

To samo dzieje się, gdy określę klucz za pomocą opcji -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).
...

Co się dzieje? Coś mi brakuje, ale nie mogę znaleźć.

Oto zawartość mojego domowego katalogu:

-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

Istnieje wiele innych kluczy, które nie są oferowane ... dlaczego oferowana jest id_alvaro_mantra, a nie inne klucze? Nie rozumiem

Potrzebuję pomocy, nie wiem gdzie szukać ...

Alvaro Maceda
źródło

Odpowiedzi:

53

Jest to oczekiwane zachowanie według strony podręcznika 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).

Zasadniczo, określenie IdentityFiles tylko dodaje klucze do bieżącej listy, którą agent SSH już przedstawił klientowi.

Spróbuj zastąpić to zachowanie poniższym opisem na dole .ssh/configpliku:

Host *
IdentitiesOnly yes
gertvdijk
źródło
Wielkie dzięki, to zadziałało. Całkowicie zapomniałem ssh-agent!
Alvaro Maceda
3
Możesz też określić to na poziomie hosta, to właśnie zrobiłem w końcu: Host git.gammu.com User git IdentityFile /home/alvaro/.ssh/id_alvaro_mantra IdentitiesOnly yes`
Alvaro Maceda
2
@AlvaroMaceda jest poprawny. Dodanie IdentitiesOnly yesdo gitadmin.gammu.com i git.gammu.com Hostwpisy wystarczy. Nie musisz wprowadzać znaku zastępczego, który wpłynie na inne hosty.
Bruno Bronosky
6

Dla mnie rozwiązaniem było dodanie klucza do listy kluczy ssh za pomocą polecenia:

ssh-add ~/.ssh/id_name_of_my_rsa_key

więc może być oferowany podczas łączenia z serwerem. Po dodaniu ssh automatycznie rozpoznano poprawny.

Edytować:

Ale ostatnio myślę, że lepszym i bardziej trwałym rozwiązaniem jest przejście do pliku konfiguracyjnego ~/.ssh/configi dodanie go IdentitiesOnly yesw następujący sposób:

Host github.com
  HostName github.com
    User git
      IdentityFile ~/.ssh/id_rsa
      IdentitiesOnly yes
Aleks
źródło
Dziękuję, twoje drugie podejście było dokładnie tym, co powinienem zrobić. Notatki dodatkowe: Nazwa hosta jest zbyt duża w twoim przykładzie, ponieważ jej wartość jest równa hostowi, wcięcie więcej niż jednego poziomu nie ma żadnego znaczenia, ponieważ istnieje grupowanie według hosta i dopasowanie tylko w ssh_config.
dess
Drugie podejście było jedynym, które działało dla mnie na OS X Catalina.
Daryl