ฉันจะหยุดการนำเสนอคีย์ผิดได้อย่างไร


33

(นี่เป็นปัญหากับ ssh ไม่ใช่ gitolite)

ฉันได้กำหนดค่า gitolite บนเซิร์ฟเวอร์ที่บ้าน (เซิร์ฟเวอร์ Ubuntu 12.04, open-ssh) ฉันต้องการ identityfile พิเศษเพื่อจัดการที่เก็บดังนั้นฉันจึงจำเป็นต้องเข้าถึง throughsh ssh ไปยังโฮสต์ของฉันเองโดยใช้รหัสประจำตัวสองตัวที่แตกต่างกัน

นี่คือเนื้อหาของไฟล์. 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 ด้วยตัวเลือก 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
...

กำลังเสนอคีย์ 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).
...

เกิดอะไรขึ้น? ฉันขาดอะไรบางอย่าง แต่หาอะไรไม่เจอ

นี่คือเนื้อหาของ dir บ้านของฉัน:

-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

นี่เป็นพฤติกรรมที่คาดหวังตาม manpage ของ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 อย่างสมบูรณ์!
Alvaro Maceda

3
นอกจากนี้คุณสามารถระบุได้ในระดับโฮสต์นั่นคือสิ่งที่ฉันได้ทำในที่สุด: Host git.gammu.com User git IdentityFile /home/alvaro/.ssh/id_alvaro_mantra IdentitiesOnly ใช่
Alvaro Maceda

2
@AlvaroMaceda ถูกต้อง เพิ่มIdentitiesOnly yesไปยังรายการ gitadmin.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

ขอบคุณแนวทางที่สองของคุณคือสิ่งที่ฉันควรทำ หมายเหตุด้านข้าง: ชื่อโฮสต์มีมากเกินไปในตัวอย่างของคุณเนื่องจากค่าเท่ากับโฮสต์การเยื้องมากกว่าหนึ่งระดับนั้นไม่มีความหมายเนื่องจากมีการจัดกลุ่มโดย Host และ Match ใน ssh_config เท่านั้น
กลบเกลื่อน

วิธีที่สองเป็นวิธีเดียวที่ทำงานกับฉันใน OS X Catalina
Daryl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.