동일한 공개 IP 주소로 NAT 서버에 SSH 연결


16

사무실 X에서 사무실 Y의 Linux 상자로 SSH를 연결하려고합니다. 사무실 Y의 Linux 상자는 NAT 뒤에 있으며 각각 자체 포트에서 실행됩니다. SSH를 통해 모든 항목에 성공적으로 도달 할 수 있지만 인증 할 수 없습니다.

첫 번째 상자에 SSH를 넣을 수 있었지만 두 번째 상자에 도착하면 다음과 같이 말했습니다.

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

내 이해는 해당 공용 IP 주소에서 동일한 키를 볼 것으로 기대하지만 다른 SSH 서버이기 때문에 다른 키를 보게됩니다.

동일한 IP 주소 뒤에있는 각 서버에서 다른 키를 작성 / 수용하도록 수정하려면 어떻게해야합니까?

여기에 이미지 설명을 입력하십시오


1
손으로 그린 ​​구름 +1
JoeG

답변:


15

호스트 이름 또는 IP 주소는 파일에 해시 (또는 옵션 및 버전 기본값에 따라 일반 텍스트)로 known_hosts저장됩니다. 가장 쉬운 해결 방법은 다음 /etc/hosts과 같이 동일한 IP (WAN) 주소를 사용하여 각 호스트의 항목을 DNS 또는 (ugh!) 파일에 추가하는 것입니다 /etc/hosts.

your.wan.ip.address      servera serverb

그런 다음 ssh호스트 이름과 포트로.


22

이 문제를 해결하는 몇 가지 방법이 있습니다.

  1. 이 특정 호스트에 대한 호스트 키 검사를 비활성화 할 수 있습니다. 당신의에서 ssh_config파일 ( ~/.ssh/config), 뭔가를 같이 넣어 :

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

    이것은에 ssh대한 호스트 키를 저장하지 않도록 구성 remote.host.name되지만 단점은 이제 중간자 공격에 노출되어 있다는 것입니다 (호스트 키를 맹목적으로 받아들이 기 때문에 원격 호스트 키가 변경되었는지 알 수 없음).

  2. 비슷한 기술을 사용하여 각 호스트에 고유 한 known_hosts파일을 제공 할 수 있습니다 .

    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
    

    그런 다음 이러한 호스트에 연결 ssh hosta하거나 ssh hostb, 및 sshconciguration 파일의 실제 호스트 이름과 포트를 취할 것입니다.


4
아니요, /etc/hosts파일 수정 도 작동합니다. (a) 에스컬레이션 된 권한이 필요하지 않으며 (b) 명령 줄에 포트 번호를 지정할 필요가 없기 때문에이 방법이 더 좋습니다.
Larsks

1
hosta 및 hostb를 WAN IP 주소와 연결하려면 이러한 솔루션 모두에서 이름 확인 (호스트 또는 DNS)이 계속 필요합니다. 그러나 둘 다 내가 LOL 편집에 입력하기에는 너무 게으른 훌륭한 제안입니다. 거기서 호스트 이름을 발견했습니다.
Brandon Xavier

2
@CopyRunStart은 : 당신은 이미 당신에 지정되어 있기 때문에 명령 줄에 포트를 지정할 필요가 없습니다 ~/.ssh/config(각각 다른 포트 hosta hostb) larsks '대답에 설명 된대로. 명령 줄에서 할 일은 그래서 마찬가지로 당신은 다른 호스트에 대해이 설정 파일에 등을 다른 사용자 이름, 키를 지정할 수 있습니다 ssh hosta또는ssh hostb
arielf

3
~ / .ssh / config를 두 번 올릴 수 있다면 그렇게 할 것입니다. / etc / hosts를 사용하면 다른 문제 해결 문제가 발생할 수 있습니다.
Aaron

1
이것은 / etc / hosts를 수정하는 것보다 훨씬 더 나은 솔루션 인 IMO입니다. 간단한 퀴즈로 HostKeyAlias알려진 호스트를 다른 파일로 분할하는 대신 지시문을 사용 합니다. 예HostKeyAlias hosta
크림슨 백로

8

사용중인 Solaris 버전 (및 더 중요하게는 SSH)을 말하지는 않지만 충분히 최신 버전의 OpenSSH가이 문제를 해결했습니다.

known_hosts파일에서 IP 주소는 동일하지만 포트 번호가 다른 두 개의 항목 이 있습니다 (하나는 암시 적 22 임). 보시다시피 저장된 키가 동일하지 않습니다.

[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==

어떤 버전의 OpenSSH에서이 버전을 소개했는지 모르겠지만 실행 중입니다.

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

3

내 의견을 @larsks 답변으로 확장하려면 ~/.ssh/config항목을 사용하는 HostKeyAlias것이 / etc / hosts를 수정하는 것보다 훨씬 낫다고 생각 하지만 알려진 호스트를 다른 파일로 분할 하는 대신 사용하는 것이 좋습니다. 예 :

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

그리고 마찬가지로 hostb

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.