Quy trình làm việc trơn tru nhất để xử lý lỗi xác minh máy chủ SSH?


41

Đây là một vấn đề đơn giản mà tất cả chúng ta phải đối mặt và có thể giải quyết bằng tay mà không cần suy nghĩ nhiều.

Khi máy chủ thay đổi, được cung cấp lại hoặc địa chỉ IP được phân bổ lại, chúng tôi sẽ nhận được thông báo xác minh máy chủ SSH bên dưới. Tôi quan tâm đến việc hợp lý hóa quy trình làm việc để giải quyết các lỗi nhận dạng ssh này.

Đưa ra thông báo sau, tôi thường vi /root/.ssh/known_hosts +434và xóa ( dd) dòng vi phạm.

Tôi đã thấy các nhà phát triển / người dùng trong các tổ chức khác xóa toàn bộ known_hosts tệp của họ vì thất vọng khi thấy thông báo này. Trong khi tôi không đi xa đến thế, tôi biết có một cách thanh lịch hơn để xử lý việc này.

Lời khuyên?

[root@xt ~]# ssh las-db1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ed:86:a2:c4:cd:9b:c5:7a:b1:2b:cc:42:15:76:8c:56.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:434
RSA host key for las-db1 has changed and you have requested strict checking.
Host key verification failed.

Chúng tôi có cùng một vấn đề. Tôi không có kinh nghiệm với Lưới ti.arc.nasa.gov/opensource/projects/mesh của NASA nhưng nó nằm trong danh sách các công nghệ cần xem xét của tôi.
Andrew Gilmartin

1
Tại sao không sao chép khóa cũ khi cài đặt lại / phân bổ lại máy chủ?
Random832

@ Random832 Nó không mở rộng trong tình huống bạn có nhiều máy chủ ... Hoặc nếu bạn có môi trường phòng thí nghiệm / kiểm tra nơi bạn thường xuyên tái chế địa chỉ IP. Hoặc một trường hợp khác; một sự thay thế máy chủ không có kế hoạch trong đó máy chủ ban đầu không có sẵn ...
ewwhite

3
Câu hỏi lớn tôi có là: Làm thế nào để bạn vào tình huống này? Nếu bạn đang sử dụng lại tên máy chủ, bạn có thể muốn xem xét lại tiêu chuẩn đặt tên máy chủ của mình ( tools.ietf.org/html/rfc1178 ). Nếu bạn đang sử dụng lại địa chỉ IP, bạn nên ngừng hoạt động các khóa ssh như một phần của quy trình tương tự như ngừng hoạt động của máy chủ trước đó trên địa chỉ IP đó. Nếu bạn đang làm việc trong môi trường "webscale" nơi việc tái sử dụng IP xảy ra trên cơ sở tự động và tên máy chủ bán vô nghĩa là bắt buộc, thì bạn nên có một quy trình vòng đời máy chủ đủ tự động để sửa các khóa ssh sẽ tiến hành
Paul Gear

Câu trả lời:


47

Bạn có thể sử dụng ssh-keygenlệnh để xóa các mục cụ thể theo máy chủ:

ssh-keygen -R las-db1

Nếu bạn không có lệnh đó, bạn luôn có thể sử dụng sed:

sed -i '/las-db1/d' /root/.ssh/known_hosts

3
Sử dụng ssh-keygen -R để giải quyết vấn đề với các khóa xung đột cũng là điều mà ứng dụng khách ssh trong Ubuntu gợi ý trong thông báo lỗi khi sự cố này xảy ra.
Kenny Rasschaert

Tôi đã không nhận thức được việc chuyển sang ssh-keygenlệnh. Tốt
ewwhite

10
Hãy nhớ kiểm tra và chắc chắn rằng ai đó không thực sự "LÀM VIỆC NÀO!"
Michael Hampton

1
Hãy chắc chắn rằng bạn không làm điều này tại một hội nghị!
Paul Gear

2
@ewwhite Bạn cư trú trong /etc/ssh/known_hoststập tin trên mạng của bạn với các phím máy chủ thích hợp (quản lý w / con rối, vv), hoặc bạn cư cá nhân ~ / .ssh / known_hosts tập tin của bạn (để làm một trong những bạn có thể chạy ssh-keyscantrên một tốt tiếng / an toàn kết nối). Chặn rằng (và giả sử bạn hoàn toàn không quan tâm đến bảo mật) UserKnownHostsFile=/dev/nullStrictHostKeyChecking=notrong ~/.ssh/config file(hoặc chuyển các tùy chọn cho ssh với -o)
voretaq7

25

Là một người dùng bù nhìn, phương pháp để giải quyết vấn đề này là thực sự để máy chủ con rối của tôi thu thập các khóa máy chủ SSH của tôi và xuất bản chúng cho tất cả các hệ thống của tôi tạo kết nối SSH.

Bằng cách này, tôi không phải lo lắng về việc loại bỏ chúng. Chín mươi chín phần trăm thời gian con rối đã chạy và cập nhật các khóa cho tôi vì tôi có các đặc vụ của mình chạy cứ sau ba mươi phút. Các trường hợp ngoại lệ đối với tôi là rất hiếm, và vì vậy tôi không ngại chỉnh sửa nhanh hệ thống được biết đến trên toàn hệ thống nếu tôi không sẵn sàng chờ đợi.

class ssh::hostkeys {

  @@sshkey { "${::clientcert}_rsa":
    type => rsa,
    key => $sshrsakey,
    tag => 'rsa_key',
  }

  if 'true' == $common::params::sshclient {
    Sshkey <<| tag == 'rsa_key' |>> {
      ensure => present
    }
  }

  file {'/etc/ssh/ssh_known_hosts':
    ensure => present,
    owner => 'root',
    group => 'root',
    mode => 0644,
  }

}

+1 Di chuyển tốt để kết hợp các công cụ quản lý cấu hình.
ewwhite

4

Tôi muốn thêm một đề nghị có thể giúp bạn trong những trường hợp rất cụ thể mà an ninh ít được quan tâm.

Tôi có một môi trường phòng thí nghiệm với các máy được cài đặt lại thường xuyên. Mỗi khi điều đó xảy ra, các khóa máy chủ mới sẽ được tạo (tôi có thể lưu khóa máy chủ ở đâu đó và đặt nó trong tập lệnh sau khi cài đặt).

Vì bảo mật không phải là vấn đề đối với tôi trong môi trường phòng thí nghiệm này và các khóa thay đổi thường xuyên, nên tôi có các phần sau trong tệp .ssh / config của mình:

Host lab-*
  User kenny
  IdentityFile ~/.ssh/lab_id_rsa
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

Điều này đảm bảo rằng việc kết nối với các máy thí nghiệm của tôi sẽ không bao giờ gây ra lỗi đó nữa và máy khách ssh của tôi sẽ chỉ kết nối mà không kiểm tra khóa máy chủ.

Đây là điều bạn chỉ nên làm nếu an ninh không liên quan gì đến bạn, bởi vì điều này đặt bạn vào vị trí dễ bị tấn công trong một cuộc tấn công trung gian.


1
Có vẻ rủi ro. Tôi muốn giữ xác minh máy chủ vì một số trong số này là các hệ thống công khai.
ewwhite

1
Đây sẽ là lý do tại sao ông đề cập rằng phương pháp này chỉ dành cho "nơi bảo mật ít / không quan tâm". Mạng riêng / môi trường phòng thí nghiệm là hoàn hảo cho cấu hình này. Hệ thống sản xuất tự động mở rộng nhiều máy / hệ thống phải đối mặt với công chúng, không quá nhiều.
dannizard

4

Theo ghi chú phát hành openssh 5.6 , bạn không cần phải sử dụng khóa máy chủ nữa:

Xác thực lưu trữ hiện có thể sử dụng khóa máy chủ chứng chỉ. Các khóa CA phải được chỉ định trong tệp đã biết bằng cách sử dụng dấu @ cert-thẩm quyền như được mô tả trong sshd (8).

Cảnh báo : Tôi chưa bao giờ nghe thấy bất cứ ai sử dụng tính năng này trong sản xuất cho đến nay. Sử dụng có nguy cơ của riêng bạn (nhưng tôi tin rằng các nhà phát triển openssh đủ hoang tưởng để không phát hành một tính năng giết người như vậy mà không có nhiều thử nghiệm và kiểm tra mã).


2

SSHFP DNS ResourceRecord có thể giúp tùy thuộc vào mức độ khách hàng ssh của bạn tận dụng lợi thế của nó. Lưu trữ tất cả dấu vân tay khóa công khai ssh của bạn trên đó với tên máy chủ.

Triển khai DNSSEC hoặc DNS qua SSL trước đó.
http://www.ietf.org/rfc/rfc4255.txt

FreeIPA.org xử lý quản lý khóa máy chủ và người dùng cũng như Chứng chỉ PKI. Nó cũng tự động tải lên các bản ghi DNS SSHFP khi các khóa mới được tạo.

Daemon Dịch vụ bảo mật hệ thống (SSSD) có thể được cấu hình để lưu trữ và truy xuất các khóa SSH của máy chủ để các ứng dụng và dịch vụ chỉ phải tìm ở một vị trí cho các khóa máy chủ. Vì SSSD có thể sử dụng FreeIPA làm một trong những nhà cung cấp thông tin nhận dạng của mình, FreeIPA cung cấp kho lưu trữ khóa phổ biến và tập trung. Quản trị viên không cần phải lo lắng về việc phân phối, cập nhật hoặc xác minh khóa SSH của máy chủ.

http://docs.fedoraproject.org/en-US/Fedora/17/html/FreeIPA_Guide/host-keys.html

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.