Bagaimana saya bisa berhenti ssh menawarkan kunci yang salah?

33

(Ini masalah dengan ssh, bukan gitolite)

Saya telah mengkonfigurasi gitolite di server rumah saya (server ubuntu 12.04, open-ssh). Saya ingin file identitas khusus untuk mengelola repositori, jadi saya perlu mengakses ssh ke host saya sendiri menggunakan dua kunci identitas yang berbeda.

Ini adalah isi dari file .ssh / config saya:

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

Ini adalah isi dari file host saya:

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

Jadi saya harus dapat berkomunikasi dengan gitolite dengan cara ini untuk mengakses dengan akun "normal":

$ssh git.gammu.com 

dan cara ini untuk mengakses dengan akun administratif:

$ssh gitadmin.gammu.com

Ketika saya mencoba mengakses dengan akun normal, semuanya baik-baik saja:

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.

Ketika saya melakukan hal yang sama dengan akun administratif:

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.

Seharusnya memperlihatkan repositori administratif. Jika saya meluncurkan ssh dengan opsi verbose:

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

Ini menawarkan id_alvaro_mantra kunci, dan seharusnya tidak !!

Hal yang sama terjadi ketika saya menentukan kunci dengan opsi -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).
...

Apa yang terjadi? Saya kehilangan sesuatu, tetapi saya tidak dapat menemukan apa.

Ini adalah isi dari dir home saya:

-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

Ada banyak kunci lain yang tidak ditawarkan ... mengapa id_alvaro_mantra ditawarkan dan bukan kunci lainnya? Saya tidak bisa mengerti

Saya butuh bantuan, tidak tahu ke mana harus mencari ....

Alvaro Maceda
sumber

Jawaban:

53

Ini adalah perilaku yang diharapkan sesuai dengan halaman manual 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).

Pada dasarnya, menetapkan IdentityFilehanya menambah kunci ke daftar saat ini agen SSH sudah disajikan kepada klien.

Coba timpa perilaku ini dengan ini di bagian bawah .ssh/configfile Anda :

Host *
IdentitiesOnly yes
gertvdijk
sumber
Terima kasih banyak, itu berhasil. Saya benar-benar lupa ssh-agent!
Alvaro Maceda
3
Juga, Anda dapat menentukannya di tingkat tuan rumah, itulah yang akhirnya saya lakukan: Host git.gammu.com User git IdentityFile /home/alvaro/.ssh/id_alvaro_mantra IdentitiesOnly yes`
Alvaro Maceda
2
@AlvaroMaceda benar. Menambahkan IdentitiesOnly yeske Hostentri gitadmin.gammu.com dan git.gammu.com sudah cukup. Anda tidak harus membuat entri wildcard yang akan memengaruhi host lain.
Bruno Bronosky
6

Bagi saya solusinya adalah menambahkan kunci ke daftar kunci ssh, dengan perintah:

ssh-add ~/.ssh/id_name_of_my_rsa_key

sehingga bisa ditawarkan saat terhubung ke server. Setelah menambahkan ssh, itu secara otomatis dikenali yang benar.

Edit:

Tetapi baru-baru ini saya pikir solusi yang lebih baik, dan lebih permanen, adalah pergi ke ~/.ssh/configdan menambahkan IdentitiesOnly yesfile konfigurasi Anda seperti ini:

Host github.com
  HostName github.com
    User git
      IdentityFile ~/.ssh/id_rsa
      IdentitiesOnly yes
Aleks
sumber
Terima kasih, pendekatan kedua Anda adalah apa yang harus saya lakukan. Catatan samping: HostName berlebihan dalam contoh Anda karena nilainya sama dengan Host, lekukan lebih dari satu level tidak memiliki arti karena ada pengelompokan oleh Host dan Cocokkan hanya di ssh_config.
dess
Pendekatan kedua adalah satu-satunya yang bekerja untuk saya di OS X Catalina.
Daryl