SSH vào một hộp có IP thường xuyên thay đổi


22

Tôi có một số hộp đám mây thay đổi IP của họ thường xuyên.

Tôi ssh sử dụng tên máy chủ nhưng phải chỉnh sửa tệp know_hosts mỗi khi máy chủ khởi chạy vì thông báo lỗi này:

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

Ngoài bất kỳ rủi ro bảo mật nào và có liên quan đến những gì tôi muốn làm, có cách nào để bỏ qua lỗi này hoặc ghi đè lên tệp know_hosts tự động để tôi không phải tự chỉnh sửa nó không?

Câu trả lời:


20

Chỉnh sửa tệp ssh_config của bạn và thêm thay đổi dòng này:

CheckHostIP no

CheckhostIP mặc định là 'có'. Điều này làm là chỉ làm loại kiểm tra bạn thất bại. Tắt nó đi có nghĩa là nó chỉ tin tưởng rằng IP là biến và sẽ kiểm tra khóa đối với tên máy chủ.


2
Điều này vô hiệu hóa một tính năng bảo mật cho tất cả các máy chủ mà bạn sẽ kết nối, đây là một thực tế cực kỳ tồi tệ. Thay vào đó bạn nên sử dụng tùy chọn này chỉ cho một máy chủ cụ thể mà bạn biết sẽ có vấn đề này - hoặc sử dụng tùy chọn HostKeyAlias - một lần nữa cho một máy chủ cụ thể.
zaTricky

@zaTricky "Thực hành cực kỳ xấu"? Có gì cực đoan về nó hmm? Tôi nghĩ rằng nó rất an toàn, nó chỉ đơn giản là một sở thích cá nhân. Bạn chỉ cần ghim một khóa vào tên máy chủ (thay vì IP). Đối với https, HPKP hoạt động tương tự và mọi người đều nói rằng nó an toàn hoặc quá an toàn.
kubanchot

@kubanchot Điều này có nghĩa là biến nó thành một thiết lập toàn cầu - không có lời khuyên nào về việc chỉ định máy chủ lưu trữ, mà tôi đã chỉ ra
zaTricky

25

Ngoài ra: bạn chỉ có thể thử vô hiệu hóa kiểm tra CheckhostIP cho tên đó :

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

5
Đây là tùy chọn tốt nhất để giảm tác động bảo mật của việc vô hiệu hóa kiểm tra IP.
Espo

3

Rất nhiều câu trả lời ở đây sẽ hoạt động - nhưng về mặt kỹ thuật chúng là cách giải quyết. OpenSSH đã có sẵn một tính năng tích hợp với ý tưởng này : HostKeyAlias.


Trong tệp .ssh / config của bạn, thêm HostKeyAlias <alias>vào cấu hình máy chủ:

host myserver.example.com
HostKeyAlias myserver.example.com

Với vị trí này, việc kết nối với máy chủ myserver.example.comsẽ không sử dụng tên máy chủ hoặc địa chỉ IP cho tham chiếu cục bộ - nó sẽ luôn chỉ sử dụng HostKeyAlias ​​đã cho khi kết nối với máy chủ đó. Đối với tôi thật hợp lý khi sử dụng tên máy chủ - nhưng tất nhiên bạn có thể sử dụng bất kỳ bí danh nào bạn thích.


Cấu hình tiêu biểu cho bản thân tôi cho các máy chủ động là như vậy:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Điều này cũng có thể được sử dụng trong một số tình huống khó hiểu khi bạn biết một loạt các máy chủ của mình có cùng khóa máy chủ (nói chung điều này không nên xảy ra). Điều này sau đó sẽ ngăn chặn các mục trùng lặp. Trong tương lai, nếu các khóa thay đổi hợp pháp, bạn không phải thay thế / xóa nhiều mục. Chỉ một. Máy chủ Gitlab Geo là một ví dụ tốt về điều này.


Về việc xóa tệp know_hosts, tôi khuyên bạn nên xem xét các câu hỏi / câu trả lời khác liên quan cụ thể đến việc duy trì / xóa các mục đã biết cũ_hosts. Ví dụ: xem Cách quản lý tệp .ssh / know_hosts của tôi ; Tôi đặc biệt ấn tượng với câu trả lời của người dùng 1953828, mặc dù tôi thấy nó không có nhiều upvote (chưa). :)


Điều này cho thấy mức độ giá trị của một câu trả lời cùng ngày đối với SO so với câu trả lời đúng, được trả lời 8 năm sau.
chẵn lẻ

2

Tôi sử dụng các tùy chọn tinh ranh để giải quyết vấn đề này. (Khóa công khai của máy chủ lưu trữ của tôi được tạo lại khá thường xuyên. Vì vậy, việc này sẽ loại bỏ kiểm tra IP và Khóa)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

Bạn cũng có thể chỉ sử dụng điều này nếu Khóa giữ nguyên nhưng IP thay đổi:

ssh remoteServerName -l username -o "CheckHostIP=no"

Nếu máy chủ của bạn thay đổi khóa máy chủ thường xuyên, bạn nên xem xét việc thiết lập ký mã khóa máy chủ
Cameron Tacklind

1

Bạn có thể đặt StricthostKeyChecking = no trong cấu hình máy khách ssh của mình (tức là tệp ~ / ssh / config trên máy mà bạn kết nối), để bỏ qua cảnh báo.


1

Bạn có thể đưa CheckHostIP novào ~/.ssh/configtập tin của mình , nhưng điều đó khiến bạn mở các cuộc tấn công giả mạo. Nếu bạn không quan tâm đến điều đó, thì cài đặt này sẽ tắt known_hostskiểm tra.


0

Tôi tránh thêm dấu vân tay vào known_hoststệp của mình khi kết nối với các máy AWS thoáng qua. Tôi sử dụng một lệnh như

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

để kết nối với họ. Nó sẽ không hỏi bạn nếu bạn muốn thêm máy vào danh sách các máy chủ đã biết. Thay thế 10.0.0.5bằng địa chỉ IP của máy và secret.pembằng đường dẫn đầy đủ của khóa Ssh của bạn. Bạn vẫn sẽ nhận được một cảnh báo rằng nó 10.0.0.5đã được thêm vào, nhưng nó đã thực sự biến mất /dev/null. Tôi làm điều này thường xuyên đủ để tôi đặt bí danh trong~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Tôi dự trữ các ssh ec2-user@example.comloại lệnh cho máy móc là tôi đã gặp rắc rối khi kiểm tra dấu vân tay.


Điều này làm cho cảm giác cho các máy chủ bạn chỉ bao giờ kết nối với một lần - nhưng có những cách tốt hơn để thoát khỏi mục cũ - và bạn không nên quan tâm về cách bẩn known_hosts của bạn tập tin là. Có khả năng bạn đã dành nhiều thời gian và năng lượng để tạo ra bí danh hơn giá trị bí danh đã mang lại cho bạn.
zaTricky

-2

Làm cho know_hosts chỉ đọc.


Điều này phá vỡ chức năng khi các tùy chọn thực dụng dễ dàng có sẵn. : - /
zaTricky
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.