Ngừng khách hàng ssh cung cấp tất cả các khóa công khai nó có thể tìm thấy?


32

Giống như hầu hết các sysadins tôi sử dụng openssh mọi lúc. Tôi có khoảng một tá khóa ssh, tôi muốn có một khóa ssh khác nhau cho mỗi máy chủ. Tuy nhiên, điều này gây ra sự cố khi tôi kết nối với máy chủ lần đầu tiên và tất cả những gì tôi có là mật khẩu. Tôi muốn chỉ kết nối với máy chủ bằng mật khẩu, không có khóa ssh trong trường hợp này. Tuy nhiên, khách hàng ssh sẽ cung cấp tất cả các khóa công khai trong tôi ~/.ssh/(tôi biết điều này khi nhìn vào đầu ra của ssh -v). Vì tôi có rất nhiều, tôi sẽ bị ngắt kết nối vì quá nhiều lỗi xác thực.

Có cách nào để nói với khách hàng ssh của tôi không cung cấp tất cả các khóa ssh không?


2
Tại sao bạn muốn có một khóa khác nhau cho mỗi máy chủ? Các khóa cũng có thể được chia sẻ trên các máy chủ trong một miền quản trị. Rõ ràng, bạn sẽ sử dụng một phím cho máy công việc của bạn và một phím khác cho máy riêng của bạn, nhưng logic đằng sau sử dụng khóa riêng cho mỗi máy tại nơi làm việc là gì?
Alex Holst

@AlexHolst Tôi đang sử dụng nhiều phím. Tôi có một mã mặc định (yêu cầu tôi nhập mật khẩu) cho cơ sở hạ tầng nội bộ. Tôi có một cái khác không được mã hóa (không có mật khẩu) mà tôi sử dụng cho một dịch vụ cụ thể mà tôi không thể sử dụng một đại lý cũng như không muốn nhập mật khẩu mỗi phút. Tôi có những người khác cho các kết nối không phải là một phần của cơ sở hạ tầng nội bộ của chúng tôi. Đó là một thực hành tốt, bởi vì mặc dù rất khó để ai đó khôi phục khóa riêng từ khóa chung, nhưng nó có thể được thực hiện. ví dụ: lỗi openssh Debian vài năm trước ...
Huygens

@Huygens Tôi rất muốn xem tài liệu phân tích rủi ro của bạn dẫn đến kết luận bạn cần sử dụng một số khóa SSH nhưng có một khóa văn bản rõ ràng là ổn. Bạn có thể gửi một liên kết?
Alex Holst

@AlexHolst bạn không cần phải "trực tiếp" như vậy. Trước hết câu trả lời của tôi là về lý do có nhiều cặp khóa. Tôi nghĩ rằng tôi đã cho bạn một số. Sau đó, tất cả chúng ta phải đối phó với những điều kỳ quặc và những gì không. Tôi có một hệ thống kiểm tra mà tôi không thể sử dụng một ứng dụng đang truyền dữ liệu qua SSH mà không được nhắc liên tục về mật khẩu chính khiến phần mềm không thể sử dụng được. Nó có vẻ là một lỗi do phiên bản không tương thích hoặc không. Tôi nhận được thông báo qua email cho bất kỳ thông tin đăng nhập SSH nào và tôi là người duy nhất đăng nhập vào hộp đó. Vì vậy, rủi ro là chấp nhận được.
Huygens

Câu trả lời:


31

Đây là hành vi dự kiến ​​theo trang người đàn ông 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

Bạn cũng có thể ghi đè cài đặt này ở cấp máy chủ, ví dụ:

Host foo
  User bar
  IdentityFile /path/to/key
  IdentitiesOnly yes

4
Bạn cũng có thể sử dụng ssh -o "IdentitiesOnly true" -v -A user@hostđó là những gì tôi sử dụng để đăng nhập vào máy không có khóa nào nhưng tôi muốn cung cấp chuyển tiếp đại lý để tiếp tục. ( -vđể gỡ lỗi dài dòng).
eckes

1
@eckes đó là một mẹo hay, nhưng không nên yes(và không true) mặc dù?
aexl

IdentitiesOnlycó thể không phải lúc nào cũng giúp, bạn có thể phải loại trừ một máy chủ lưu trữ cụ thể; xem superuser.com/questions/859661/ cấp
aexl

38

Mặc dù những người khác đã ám chỉ điều này với các giải pháp dựa trên cấu hình, nhưng có lẽ đáng để chỉ ra rằng bạn có thể dễ dàng thực hiện việc này một lần duy nhất trên dòng lệnh với:

ssh -o 'PubkeyAuthentication no' myhostname.mydomain

3
Hoàn hảo .. Giải pháp IMHO
drAlberT

1
Đúng điều này nên đã được câu trả lời chấp nhận.
JM Becker

11

Theo giải pháp của James Sneeringer, bạn có thể chỉ muốn đặt ssh_config dọc theo dòng:

Host *.mycompany.com
  IdentityFile .ssh/id_dsa_mycompany_main

Host *.mycustomer.com
  IdentityFile .ssh/id_dsa_mycustomer

Host *
  RSAAuthentication no #this should be up top, avoid ssh1 at all costs
  PubkeyAuthentication no

Nếu bạn kết nối với một khóa cụ thể với nhiều máy không thuộc một miền chung, hãy xem xét cung cấp cho họ tất cả các CNAME trong DNS của riêng bạn. Tôi làm điều này với tất cả các hệ thống khách hàng.


2

Tương tự như giải pháp của user23413, bạn có thể vô hiệu hóa hoàn toàn xác thực khóa chung cho một máy chủ cụ thể (hoặc mẫu ký tự đại diện):

Host *.example.org
RSAAuthentication no        # SSHv1
PubkeyAuthentication no     # SSHv2

-1

Nếu bạn trỏ đến một tệp khóa cụ thể bằng ssh -i / path / to / key, nó sẽ chỉ sử dụng tệp đó ngay cả khi các tệp khác được tải vào tác nhân và bạn sẽ không được nhắc nhập mật khẩu. Bạn cũng có thể chỉnh sửa bạn ~ / .ssh / config và quảng cáo một cái gì đó như thế này ...

Lưu trữ foo.example.com
Danh tínhFile .ssh / id_rsa_foo.example.com

bạn cũng có thể làm ...

Máy chủ * .example.org
Danh tínhFile .ssh / id_rsa_example.org


Điều đó chỉ thêm vào khóa mục tiêu đến cuối danh sách, điều này sẽ không giải quyết được vấn đề. IdentitiesOnlychỉ với ý chí đó.
Jo Rhett
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.