SSH vào các máy chủ NAT trên cùng một địa chỉ IP công cộng


16

Tôi đang cố gắng SSH từ văn phòng X đến một vài hộp Linux trong văn phòng Y. Các hộp Linux trong văn phòng Y đều đứng sau NAT và mỗi hộp chạy trên các cổng riêng của họ. Tôi có thể tiếp cận thành công tất cả chúng thông qua SSH, nhưng tôi không thể xác thực.

Tôi đã có thể SSH vào hộp đầu tiên, nhưng khi tôi đến hộp thứ hai thì nó báo:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
[edited out fingerprint]
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:1

Tôi hiểu rằng họ đang mong đợi thấy cùng một khóa từ địa chỉ IP công cộng đó, nhưng nó đang thấy một khóa khác vì đó là một máy chủ SSH khác.

Làm cách nào tôi có thể sửa nó để nó tạo / chấp nhận một khóa khác nhau từ mỗi máy chủ đằng sau cùng một địa chỉ IP đó?

Nhập mô tả hình ảnh ở đây


1
+1 cho đám mây vẽ tay.
JoeG

Câu trả lời:


15

Tên máy chủ hoặc địa chỉ IP đang được lưu trữ dưới dạng băm (hoặc ở dạng văn bản thuần tùy thuộc vào tùy chọn và mặc định phiên bản) trong known_hoststệp của bạn . Cách giải quyết đơn giản nhất là thêm một mục nhập cho mỗi máy chủ vào /etc/hoststệp DNS hoặc (ugh!) Có cùng địa chỉ IP (WAN), chẳng hạn như trong /etc/hosts:

your.wan.ip.address      servera serverb

và sau đó sshbằng tên máy chủ và cổng.


22

Có một số cách khắc phục điều này:

  1. Bạn có thể vô hiệu hóa kiểm tra khóa máy chủ cho máy chủ cụ thể này. Trong ssh_configtệp của bạn ( ~/.ssh/config), đặt một cái gì đó như:

    Host remote.host.name
    UserKnownHostsFile /dev/null
    StrictHostkeyChecking no
    

    Điều này cấu hình sshđể không bao giờ lưu trữ khóa máy chủ remote.host.name, nhưng nhược điểm là bây giờ bạn đang mở các cuộc tấn công trung gian (vì bạn chấp nhận một cách mù quáng các khóa máy chủ mà bạn không thể biết nếu khóa máy chủ từ xa đã thay đổi).

  2. Bạn có thể sử dụng một kỹ thuật tương tự để chỉ cung cấp cho mỗi máy chủ một known_hoststệp duy nhất :

    Host hosta
    Port 10098
    Hostname remote.host.name
    UserKnownHostsFile ~/.ssh/known_hosts_hosta
    
    Host hostb
    Port 10099
    Hostname remote.host.name
    UserKnownHostsFile ~/.ssh/known_hosts_hostb
    

    Sau đó, bạn sẽ kết nối với các máy chủ này bằng ssh hostahoặc ssh hostb, và sshsẽ lấy tên máy chủ và cổng thực tế từ tệp conciguration.


4
Không, sửa đổi /etc/hoststập tin cũng sẽ làm việc. Tôi thích điều này hơn vì (a) nó không yêu cầu các đặc quyền leo thang và (b) nó có nghĩa là bạn không cần chỉ định số cổng trên dòng lệnh.
larsks

1
Độ phân giải tên (máy chủ hoặc DNS) vẫn sẽ được yêu cầu trong cả hai giải pháp này để liên kết hosta và hostb với địa chỉ IP WAN. Nhưng cả hai đều là những gợi ý tuyệt vời Tôi đã quá lười để gõ vào LOL Chỉnh sửa: Chỉ cần chú ý Tên máy chủ trong đó - cào về độ phân giải tên.
Brandon Xavier

2
@CopyRunStart: bạn không cần chỉ định cổng trên dòng lệnh vì nó đã được chỉ định trong ~/.ssh/config(một cổng khác nhau cho mỗi hosta hostb) như được mô tả trong câu trả lời của larsks. Tương tự như vậy bạn có thể chỉ định tên người dùng khác nhau, chìa khóa, vv trong này config-file cho các host khác nhau vì vậy tất cả bạn phải làm trên dòng lệnh là ssh hostahayssh hostb
arielf

3
Nếu tôi có thể upvote ~ / .ssh / config hai lần, tôi sẽ làm thế. Đấu tranh với / etc / hosts bị ràng buộc gây ra các sự cố khắc phục sự cố khác.
Aaron

1
Đây là một giải pháp tốt hơn nhiều, IMO, hơn là sửa đổi / etc / hosts. Là một vấn đề nhỏ, tôi sử dụng HostKeyAliaschỉ thị thay vì tách ra các máy chủ đã biết thành các tệp khác nhau. ví dụHostKeyAlias hosta
màu đỏ thẫm-cò

8

Bạn không nói phiên bản Solaris nào (và quan trọng hơn là SSH) bạn đang sử dụng, nhưng các phiên bản OpenSSH đủ cập nhật đã giải quyết vấn đề này.

Đây là hai mục từ known_hoststệp của tôi , có cùng địa chỉ IP nhưng số cổng khác nhau (một là ẩn 22); như bạn có thể thấy các khóa được lưu trữ không giống nhau.

[10.69.55.47]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAo+zenWwhFWAa/exdxbm3A3htDFGwFVjFlHLO83AfOaloBbBrr6whmLeDqVPBSwI/yrePClpahLUMYE6qGBFCbbOYiQkMDwacNFfxvxd6oCMDDqZH6NWGiBCt0b2M6YKYhYCw6z8n0yvlLk1eTdpp2OpjbfwAIe4eBkWyKNZY9+17VtzARqGR9tgHC8Dh7HBApDR8wooc+XzY6FhD2b21meIt8r8bjfBIu5t6eQgDHh/TzUT1rGH6W0HeUJxpDnpud5Af1ygMEQFrGrzHi5HKtg+K6HFBggMF8t6p2Dz8oMds5pi6IuPlVi3UvO1X7mMJ9pP7ByMQqiVrQ9wtAbC2QQ==
10.69.55.47 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1clJ6vp8NDy7D9YVgAKQQzERfx3scR0c0027yOYGGpeLg+nW+x8mJk1ia9GouUTDME+NP2YDVZUEDog9rtTJvuLd22ZxfoC8LGboyBsmlhOVxdSCxmA/+blPCp1pyocr8pXyXjSkb/qQKKQMRoAU7qKKHPfI5Vugj04l6WbW2rJQTqFD/Lguc8AAUOE6K4DNhETOH2gOnwq6xi0vutDmeUKSqEvM/PQFZSlOL4dFDYO5jAUjvgm6yGHP3LlS9fmCzayJgGgLSnNz0nlcd94Pa1Cd441cCAZHFDvDPniawEafH9ok4Mmew0UGopQGUGbfb5+8g8YphLW6aLdrvnZbAw==

Tôi không biết phiên bản OpenSSH nào đã giới thiệu, nhưng tôi đang chạy

[me@risby fin]$ ssh -V
OpenSSH_6.9p1, OpenSSL 1.0.1k-fips 8 Jan 2015

3

Để mở rộng nhận xét của tôi thành câu trả lời @larsks, tôi nghĩ rằng sử dụng ~/.ssh/configcác mục nhập tốt hơn nhiều so với sửa đổi / etc / hosts, mặc dù tôi sẽ sử dụng HostKeyAliasthay vì tách các máy chủ đã biết thành các tệp khác nhau. ví dụ:

Host hosta
Port 10098
Hostname remote.host.name
HostKeyAlias hosta

Và tương tự cho hostb

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.