it-swarm-vi.com

Khóa ECDSA đã thay đổi, SSH không an toàn bây giờ?

Tôi đang chạy một số máy chủ Ubuntu không quan trọng trong phòng ký túc xá của tôi ở trường đại học. Tắt chúng trước khi ngắt, quay lại, SSH vào và nhận được cảnh báo rằng các khóa ECDSA đã thay đổi.

Nó trông khá giống thế này

Warning: the ECDSA Host key for '<snip>' differs from the key for the IP address '<snip>'
Offending key for IP in /home/<snip>/.ssh/known_hosts:14
Matching Host key in /home/<snip>/.ssh/known_hosts:12
Are you sure you want to continue connecting (yes/no)?

Điều này có vẻ ít đáng sợ hơn so với lỗi thay đổi danh tính máy chủ vì vậy tôi không quá lo lắng nhưng vẫn vậy, điều gì sẽ khiến điều này thay đổi? Đây có phải là điều tôi nên lo lắng?

29
TheLQ

Khi bạn kết nối lần đầu tiên với một máy chủ SSH cụ thể, bạn sẽ nhận được câu hỏi thông thường với dấu vân tay chính; sau đó, máy khách SSH lưu trữ một bản sao của khóa công khai của máy chủ trong tệp .ssh/known_hosts. Nhưng máy khách SSH thực sự lưu trữ hai khóa: một cho máy chủ tên và một cho máy chủ [~ # ~] ip [~ # ~] .

Ví dụ: giả sử rằng máy chủ foo.example.com Có IP 10.0.0.8. Khi kết nối đầu tiên của bạn (ssh foo.example.com), Máy khách SSH sẽ nhận được khóa chung của máy chủ, hiển thị dấu vân tay (hàm băm của khóa chung), yêu cầu xác nhận và sau đó lưu trữ trong known_hosts gửi hai ánh xạ, một cho foo.example.com, cái còn lại cho 10.0.0.8, cả hai đều trỏ đến cùng một khóa chung.

Khi bạn kết nối trở lại cùng một máy chủ, SSH sẽ xác minh hai ánh xạ. Nếu ánh xạ đầu tiên (mã cho tên) mang lại khóa công khai khác với khóa được ghi trong known_hosts, Bạn sẽ nhận được thông báo lỗi đáng sợ với UPPERCASE LETTERS (đó là cách nó quản lý đáng sợ) và khách hàng từ chối kết nối thêm (vì vậy tin nhắn không chỉ đáng sợ mà còn khá bất tiện).

Một tình huống khác là khi ánh xạ đầu tiên khớp:

  • Các loại người dùng: ssh foo.example.com.
  • Hệ thống DNS phân giải tên đó thành IP 10.0.0.8.
  • Máy khách SSH kết nối với máy đó và lấy khóa công khai của máy chủ SSH.
  • Khóa công khai thu được khớp với khóa được tìm thấy trong .ssh/known_hosts Trong mục foo.example.com.
  • [~ # ~] nhưng [~ # ~] khóa công khai thu được không [~ # ~] không [ ~ # ~] khớp với cái được tìm thấy trong .ssh/known_hosts Trong mục 10.0.0.8.

Trong trường hợp đó, bạn nhận được thông báo chính xác mà bạn hiển thị trong câu hỏi của mình. Máy khách SSH có một số đảm bảo rằng bạn đang nói chuyện với máy chủ dự định - khóa chung khớp với khóa được ghi cho cùng một máy chủ tên - nhưng một cái gì đó vẫn còn không ổn, do đó cảnh báo và nhắc nhở xác nhận.

Điều này có thể xảy ra khi IP máy chủ đã thay đổi. Với ví dụ trên, giả sử rằng, tuần trước, foo.example.com Đã có IP 10.0.0.7, Nhưng bar.example.com Có IP 10.0.0.8. Lúc đó, bạn kết nối với cả hai. Nhưng cuối tuần trước, một sysadmin mắc chứng rối loạn cưỡng chế ám ảnh nhẹ đã quyết định rằng một số IP phải được thay đổi, để anh ta có thể thiết lập các quy tắc mạng thanh lịch hiệu quả, thường xuyên và toán học hơn. Vì vậy, anh ta đã "di chuyển các máy chủ xung quanh" và đặt bar.example.com Thành IP 10.0.0.16foo.example.com Thành 10.0.0.8. Người bạn của chúng tôi, sysadmin đã cấu hình DNS một cách cẩn thận để báo cáo IP mới. Bây giờ, chúng tôi đang vào thứ Hai và bạn muốn kết nối lại. Ứng dụng khách SSH của bạn nói chuyện với DNS, nhận IP mới với foo.example.com Và tất cả đều ổn, ngoại trừ rằng khóa được ghi cho 10.0.0.8 Không khớp với khóa chung của foo.example.com: Thực sự, tệp known_hosts Của bạn chứa bản sao của khóa công khai của bar.example.com, Được liệt kê trong IP 10.0.0.8, Mà, cho đến tuần trước, là bar 's IP, không phải foo' s.

Một sysadmin với OCD không thực sự cần thiết cho kịch bản này; nó cũng có thể xảy ra với các thiết lập IP động hoặc với một số trường hợp cân bằng tải.

Giải pháp : sử dụng trình soạn thảo văn bản và xóa mục nhập vi phạm khỏi known_hosts (Dòng 14, trong trường hợp của bạn). Bạn cũng có thể sử dụng lệnh ssh-keygen -R <Host> Để xóa mục cụ thể. Lần tới khi bạn kết nối, máy khách sẽ hiển thị một cảnh báo khác (lần này phàn nàn về sự vắng mặt của bất kỳ khóa công khai nào được ghi cho IP đích), nhưng cái này sẽ bay gần như không được chú ý, bởi vì sẽ không có Prompt nào cả. Sau đó, máy khách SSH sẽ ghi lại khóa chung trong known_hosts Và đặt mọi thứ đúng, ít nhất là cho đến khi sysadmin nghe thấy giọng nói lần nữa .

Ngoài ra, vô hiệu hóa kiểm tra IP máy chủ trong máy khách SSH, bằng cách đặt tùy chọn CheckHostIP thành no (trong toàn hệ thống /etc/ssh/ssh_config Hoặc .ssh/config, hoặc trực tiếp trên dòng lệnh: ssh -o CheckHostIP=no foo.example.com). Kiểm tra máy chủ-IP rất hữu ích để phát hiện các tình huống bất thường của tên máy chủ lang thang, nhưng đối với một số sysadins, việc tung hứng IP của máy chủ là hoàn toàn "bình thường".

41
Tom Leek

Giả sử tôi đoán <snip> phần chính xác, trông giống như tên máy chủ (example.com) hiện đang phân giải thành một IP khác so với trước đây.

Có hay không bạn cần phải lo lắng về điều đó rất khó để nói mà không có thêm thông tin. Tên máy chủ là hình thức nào? Nó có phải là FQDN không? Được giải quyết bằng DNS? Bạn đã thực hiện bất kỳ thay đổi DNS? Đó là loại thông tin.

Có lẽ sẽ tốt hơn nếu bạn thay thế tên máy chủ và IP của mình bằng các ví dụ (example.com, example.net, example.organything-you-want.test tốt cho tên máy chủ, IP riêng như 192.168.foo.bar hoặc là 10.foo.bar.baz tốt cho IP), theo cách đó, đầu ra lệnh dễ hiểu hơn. Bạn cũng có thể sử dụng điều này để cho biết hai tên miền có nằm trong cùng một TLD hay không, liệu hai IP có nằm trong cùng một mạng con hay không, v.v ... vì vậy nó rất hữu ích.

10
Jerome Baum

Nếu IP không được di chuyển và gói máy chủ openssh không được nâng cấp và khóa Máy chủ mới được tạo thì chuyện gì đã xảy ra?

Mặc dù bạn có thể vô hiệu hóa kiểm tra khóa Máy chủ, nhưng đây không phải là cách tôi sẽ bắt đầu.

Điều dường như đã xảy ra là ssh hiện đang sử dụng một hệ thống khóa Máy chủ khác (ECDSA so với DSA hoặc RSA) và cảnh báo đang khiến chúng tôi nhận ra điều đó.

5
Lars Nordin