Làm thế nào tôi có thể ngừng ssh cung cấp một khóa sai?


33

(Đây là một vấn đề với ssh, không phải gitolite)

Tôi đã cấu hình gitolite trên máy chủ nhà của tôi (máy chủ Ubuntu 12.04, open-ssh). Tôi muốn một tệp nhận dạng đặc biệt để quản lý các kho lưu trữ, vì vậy tôi cần truy cập thông qua ssh đến máy chủ của riêng tôi sử dụng hai khóa nhận dạng khác nhau.

Đây là nội dung của tệp .ssh / config của tôi:

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

Đây là nội dung của tập tin máy chủ của tôi:

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

Vì vậy, tôi sẽ có thể liên lạc với gitolite theo cách này để truy cập bằng tài khoản "bình thường":

$ssh git.gammu.com 

và cách này để truy cập bằng tài khoản quản trị:

$ssh gitadmin.gammu.com

Khi tôi cố gắng truy cập bằng tài khoản bình thường, tất cả đều ổn:

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.

Khi tôi làm tương tự với tài khoản quản trị:

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.

Nó sẽ hiển thị các kho lưu trữ hành chính. Nếu tôi khởi chạy ssh với tùy chọn dài dòng:

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

Nó cung cấp khóa id_alvaro_mantra và không nên !!

Điều tương tự cũng xảy ra khi tôi chỉ định khóa với tùy chọn -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).
...

Chuyện gì đang xảy ra vậy? Tôi đang thiếu một cái gì đó, nhưng tôi không thể tìm thấy những gì.

Đây là nội dung của thư mục nhà của tôi:

-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

Có một loạt các khóa khác không được cung cấp ... tại sao id_alvaro_mantra được cung cấp mà không phải là các khóa khác? Tôi không thể hiểu.

Tôi cần giúp đỡ, không biết tìm ở đâu ....

Câu trả lời:


53

Đây là hành vi dự kiến ​​theo trang chủ của 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).

Về cơ bản, việc chỉ định IdentityFiles chỉ thêm các khóa vào danh sách hiện tại mà tác nhân SSH đã được trình bày cho khách hàng.

Hãy thử ghi đè hành vi này với hành vi này ở cuối .ssh/configtệp của bạn :

Host *
IdentitiesOnly yes

Cảm ơn rất nhiều, điều đó đã làm việc. Tôi hoàn toàn quên ssh-agent!
Alvaro Maceda

3
Ngoài ra, bạn có thể chỉ định nó ở cấp máy chủ, đó là những gì tôi đã thực hiện cuối cùng: Host git.gammu.com User git IdentityFile /home/alvaro/.ssh/id_alvaro_mantra Nhận dạng Chỉ có có
Alvaro Maceda

2
@AlvaroMacesa là chính xác. Thêm IdentitiesOnly yesvào các mục gitadmin.gammu.com và git.gammu.com Hostlà đủ. Bạn không phải tạo một mục ký tự đại diện sẽ ảnh hưởng đến các máy chủ khác.
Bruno Bronosky

6

Đối với tôi, giải pháp là thêm một khóa vào danh sách các khóa ssh, bằng lệnh:

ssh-add ~/.ssh/id_name_of_my_rsa_key

vì vậy nó có thể được cung cấp khi kết nối với máy chủ. Sau khi thêm một ssh, nó đã tự động được nhận ra đúng.

Chỉnh sửa:

Nhưng gần đây tôi nghĩ giải pháp tốt hơn và lâu dài hơn là tìm ~/.ssh/configvà thêm IdentitiesOnly yesvào tệp cấu hình của bạn như thế này:

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

Cảm ơn bạn, cách tiếp cận thứ hai của bạn là chính xác những gì tôi nên làm. Ghi chú bên lề: Tên máy chủ quá mức trong ví dụ của bạn vì giá trị của nó bằng với Máy chủ lưu trữ, việc thụt lề nhiều hơn một cấp không có nghĩa là vì chỉ có nhóm và Chủ chỉ khớp trong ssh_config.
dess

Cách tiếp cận thứ hai là cách duy nhất phù hợp với tôi trên OS X Catalina.
Daryl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.