여러 호스트가 동일한 IP 및 DNS 이름을 공유 할 때 known_hosts를 편집하는 방법은 무엇입니까?


29

나는 정기적으로 듀얼 부팅 OS X / Linux 컴퓨터 인 컴퓨터에 ssh를 넣습니다. 두 OS 인스턴스는 동일한 호스트 키를 공유하지 않으므로 동일한 IP 및 DNS를 공유하는 두 개의 호스트로 볼 수 있습니다. 하자가 IP가 말하는 192.168.0.9, 그리고 이름은 hostnamehostname.domainname

내가 아는 한, 두 호스트에 연결할 수있는 솔루션은 두 호스트 모두 ~/.ssh/know_hosts파일에 추가하는 것 입니다. 그러나, 쉽게 파일을 해시되어 있기 때문에, 수행 및 호스트 당 아마도 몇 가지 항목이보다 말한다 ( 192.168.0.9, hostname, hostname.domainname). 결과적으로 다음과 같은 경고가 있습니다.

Warning: the ECDSA host key for 'hostname' differs from the key for the IP address '192.168.0.9'

known_hosts해시를 유지하면서 파일 을 편집하는 쉬운 방법이 있습니까? 예를 들어, 주어진 hostame에 해당하는 줄을 어떻게 찾을 수 있습니까? 일부 알려진 호스트에 대한 해시를 어떻게 생성 할 수 있습니까?

이상적인 솔루션은 내가 상관없이 내가 전화 여부, SSH와이 컴퓨터에 원활하게 연결하지 수 있도록 것 192.168.0.9, hostname또는 hostname.domainname,도 아니다는 리눅스 호스트 키 또는 OSX의 호스트 키를 사용하는 경우. 그러나 실제 중간자 공격이있는 경우 ( 예 : 이 두 키 이외의 다른 키가 사용 된 경우) 경고를 계속 받고 싶습니다 .


무엇을하고 싶습니까? 무엇을 위해 수정 하시겠습니까?
Rhyuk

@Rhyuk : IP 주소, 호스트 이름 및 호스트 이름. 도메인 이름에 대해 OSX 및 Linux 호스트 키 모두 유효한 것으로 인식 할 수 있도록 편집하십시오.
Frédéric Grosshans

@Rhyuk : 질문을 편집했습니다. 지금 더 명확합니까?
Frédéric Grosshans

2
두 설치 모두 동일한 키를 갖는 것을 고려한 적이 있습니까?
Zoredache

3
하나의 IP 주소를 사용하여 여러 엔티티 (각 개별 SSH 호스트 키가있는)에 액세스하고 해당 호스트 키만 SSH 클라이언트가 볼 수있는 엄격한 제어를 유지하는 것이 합리적인 경우가 있습니다. 예를 들어 하나의 공유 IP 주소를 사용하여 장치 클러스터에 액세스하는 일부 고 가용성 설정 (어떤 이유로 든 클라이언트가 본 SSH 호스트 키가 현재 활성화되어있는 클러스터 장치에 따라 변경되는 위치). 또 다른 경우는 여러 SSH 호스트가 NAT 방화벽 뒤에 있고 외부에서 액세스 할 때 모두 동일한 IP를 갖는 것으로 보입니다.
IllvilJa

답변:


12

여기서 가장 간단한 해결책은 Linux 및 OS X에 동일한 호스트 키를 사용하는 것입니다. 즉, /etc/ssh/ssh_host_*_key*파일 세트를 하나 선택 하여 다른 OS로 복사합니다. 그런 다음 부팅 한 OS에 관계없이 동일한 호스트 키가 SSH 클라이언트에 표시되고 SSH 클라이언트는 더 현명하지 않습니다.


클라이언트 버전을 선호하지만 찾지 못한 경우 시도해 보겠습니다. 그건 그렇고, 파일의 OSX (비표준) 지역화는 /private/etc/ssh_host*아닙니다 /etc/ssh/ssh_host*.
Frédéric Grosshans

한 컴퓨터에서 다른 컴퓨터 (두 개의 Linux 컴퓨터)로 파일을 복사해도 효과가 없었습니다. 파일 내용이 동일하지만 해시가 아니 었으므로 여전히 문제가 발생했습니다 (수정 시간은 어쩌면?). 아래 솔루션이 훨씬 좋습니다.
Stav

sshd시작시 호스트 키를 한 번로드하므로 다시 시작해야 할 가능성이 높습니다 sshd. 답변에 추가하겠습니다. 더 나은 다른 솔루션은 상황에 따라 다릅니다. 이 방법의 주요 장점은 한 번만 설정하면되고 여러 SSH 클라이언트 구현에서 작동 할 가능성이 높다는 것입니다.
jjlin

흥미롭게도 비교적 최근의 OpenSSH 7.4p1이 sshd각각의 새로운 연결에 호스트 키를로드 하는 것 같습니다 . 어쩌면 그것은 오랜 시간이 지났고 방금 호스트 키가 다른 sshd구성 처럼 취급되었다고 가정했습니다 . 어쨌든, 그것은 당신의 문제 일 수도 있고 아닐 수도 있습니다.
jjlin

동일한 VRRP 주소를 공유하는 클러스터의 두 호스트에이 작업을 수행하는 것이 좋지 않습니까? 장애 조치시 응답하는 호스트가 다릅니다. 경고를 받고 싶지 않습니다.
Colin 't Hart

26

@Izzy가 위의 주석에서 제안한 것처럼 ssh는 문제가되는 줄을 알려주고 해당 줄을 제거하고 (다른 곳에 저장) 새 키를 수락 한 다음 제거 된 줄을 다시 복사하여 동일한 키를 두 개 감습니다. 호스트이고 ssh는 둘 중 하나를 허용합니다.

( ssh-keygen -H -F <hostname>known_hosts 파일에서 해당 호스트 이름과 일치하는 행을 찾는 데 사용할 수도 있습니다 . 제거 된 행을 다시 복사 한 후 실행하면 두 개의 항목이 나열됩니다.)

누구든지 PuTTY가 똑같은 일을하는 방법을 알고 있다면 그것에 대해 듣고 싶습니다.


4
실제로 Linux 클라이언트가있는 경우 문제가되는 행을 제거 할 필요조차 없으며 앞에 해시 ( '#') 문자로 주석 처리해야합니다. 그런 다음 새 키를 수락하면 known_hosts 파일을 편집하고 이전 키로 줄의 주석을 해제하면됩니다. 그러나 예, 이것은 퍼티에서도 유용합니다.
IllvilJa

1
이름은 같지만 IP 주소와 호스트 키가 다른 두 개의 호스트가있는 경우이 해결 방법도 작동합니다. 해당 호스트의 두 줄 (IP 주소 기반 호스트와 호스트 기반 호스트)을 주석 처리 (또는 일시적으로 삭제)합니다. 이름), 아직 알 수없는 호스트에 연결 한 다음 주석 처리되었거나 삭제 된 행을 다시 추가하십시오.
Kai Petzke

13

나는 당신이 달성하고자하는 것에 도움이 될 수있는 것을 발견했습니다.

출처 : /programming/733753/how-to-handle-ssh-host-key-verification-with-2-different-hosts-on-the-same-but

다음과 같이 .ssh 디렉토리에 구성 파일을 작성하십시오.

Host server1
  Hostname x1.example.com
  HostKeyAlias server1
  CheckHostIP no
  Port 22001
  User karl

Host server2
  Hostname x2.example.com
  HostKeyAlias server2
  CheckHostIP no
  Port 22002
  User karl

아래 설명 (man ssh_config에서)

CheckHostIP

이 플래그가 "yes"로 설정되면 ssh (1)은 known_hosts 파일에서 호스트 IP 주소를 추가로 확인합니다. 이를 통해 ssh는 DNS 스푸핑으로 인해 호스트 키가 변경되었는지 감지 할 수 있습니다. 옵션이 "no"로 설정되어 있으면 검사가 실행되지 않습니다. 기본값은 "예"입니다.

HostKeyAlias

호스트 키 데이터베이스 파일에서 호스트 키를 찾거나 저장할 때 실제 호스트 이름 대신 사용해야하는 별명을 지정합니다. 이 옵션은 SSH 연결을 터널링하거나 단일 호스트에서 실행되는 여러 서버에 유용합니다.

사용자 이름 및 포트 행을 사용하면 명령 행에서 해당 옵션을 제공하지 않아도되므로 다음을 사용할 수 있습니다.

% ssh server1
% ssh server2

이 기사를 보았지만 제 경우에는 해당하지 않습니다. 두 서버는 기사가 아닌 기사에서 포트 번호로 구별됩니다. 또한, 나는에 소금에 절인 해시 제기 보안의 추가 레이어 유지하고 싶은 known_hostsCheckHostIP.
Frédéric Grosshans

1
@ FrédéricGrosshans, 나는 확인했다. 별도의 포트가 필요하지 않으며 HashKnownHosts 옵션이 HostKeyAlias와 잘 작동합니다.
Zoredache

내가 잘못한 것이 아닌 한, 이것의 단점은 클라이언트별로 구성되며 허용되는 답변은 수락하는 ssh 서버에서만 구성됩니다.
FreeSoftwareServers

2

문제를 해결하는 가장 쉬운 방법은 각 호스트에 고유 한 / 고유 한 IP 주소를 제공하는 것입니다. (사설) 인터넷과 IPv4에서 253 개의 주소를 사용할 수 있다면 큰 문제가되지 않습니다. 고정 IP를 제공하십시오 (DHCP 서버는 네트워크 카드 MAC 주소를 기반으로 시스템을 식별하고 둘 다 동일한 주소를 얻으므로). 보안 조치를 유지하려는 경우 다른 솔루션을 보지 못합니다 (작은 "편안함"으로 떨어 뜨리지 않을 것입니다).


실제로, IP 주소는 192.168.0.xx개인용이 아니며 개인용이 아닙니다. 대학에서 제공 한 '실제'IPv4 주소이며 자유롭게 변경할 수 없습니다.
프레데릭 그 로샨 스

Wikipedia로 확인 하면 192.168.0.0-192.168.255.255 (이 범위에 속하는 192.168.0.9로 지정된 질문)는 "개인 IPv4 주소 공간"에 속합니다. 그래서 "개인"에 의해 나는 당신이 그것을 "소유"하는 것이 아니라 IETF 의 스펙을 언급했습니다 . 귀하의 질문에 귀하는 IP를 변경할 수 없다는 것을 나타내지 않았습니다. 죄송하지만 입력 내용이 있으면 제 답변이 적합했습니다.
Izzy

잘못 표현 된 질문에 대해 죄송합니다. 나는 공감하지 않았다.
Frédéric Grosshans

문제도없고 tnx도 알려 주므로 다운 보트의 낙담이 줄어 듭니다. 그러나 다른 아이디어 : known_hosts 파일이 호스트 이름을 가져 오는 위치, 역방향 DNS 또는 클라이언트가 제공하는지 확실하지 않습니다. "호스트"중 하나의 이름을 바꾸어 다른 호스트 이름을 제시 할 수 있습니다. 또는 두 호스트 키를 모두 추가하려면 다음을 수행하십시오. ssh는 known_hosts 파일 ( "# 1이 ynd에 포함 된 경우 # 2와 연결될 때")의 "해제 라인"을 알려줍니다. 따라서 해당 줄을 다른 파일로 복사하고 known_hosts에서 제거하고, # 2를 연결하고 줄을 추가 한 다음 제거 된 줄을 다시 추가 할 수 있습니다. 작동하는지 확실하지 않지만 시도해 볼 수 있습니다.
Izzy

2

동일한 IP를 공유하는 다양한 VPS 상자에 연결할 때 각기 다른 SSH 포트 (20022,30022 등)를 가지므로 다른 키를 가진 알려진 호스트로 등록되기 때문에이 문제가 발생하지 않습니다.

이것이 당신을위한 해결책이 될 수 있습니까?


@Pyheme 안녕하세요, 슈퍼 유저에 오신 것을 환영합니다! 이 질문은 거의 4 살입니다. 대답하는 데 아무런 문제가 없지만 응답이 없을 수도 있습니다.
Hewbot

더 이상 OS X 컴퓨터가 없지만 귀하의 답변은 다른 사람에게 유용 할 수 있습니다. 이것이 스택 교환의 핵심입니다
Frédéric Grosshans

@Hewbot ... 실제로, 나는 그것을 지금 본다. 이유를 모르겠습니다. 최근 질문 목록에 나타났습니다.
Pyheme

1

문제를 처리하는 몇 가지 방법을 설명하는 다른 기사 :

두 번째 방법은 두 개의 openSSH 매개 변수 인 StrictHostKeyCheckin, 및을 사용 UserKnownHostsFile합니다. 이 방법은 빈 known_hosts 파일을 사용하도록 SSH를 구성하고 원격 호스트 ID 키를 확인하도록 요청하지 않습니다.


이 백서는 키 확인을 허용하지 않습니다. 키 점검을 유지하고 싶습니다. hostnameLinut 또는 OSX로 재부팅 할 때마다 키를 허용하지 않습니다
Frédéric Grosshans

1
슈퍼 유저에 오신 것을 환영합니다! 이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다. 나는 짧은 부분을 포함했지만 그것은 당신이 의도 한 것이 아닐 수도 있습니다 ...
Tamara Wijsman

1

엄격한 호스트 키 검사를 유지하기 위해 다른 known_hosts파일을 사용하게 할 것 입니다. 이렇게하려면 다음과 같이 ~/.ssh/config파일 (또는 /etc/ssh/ssh_config여러 로컬 사용자 계정에서 작동해야하는 경우 파일)을 설정하십시오.

Host myserver.osx
  UserKnownHostsFile ~/.ssh/known_hosts.dual.osx
  # default is ~/.ssh/known_hosts
  Hostname $REALHOSTNAME

Host myserver.linux
  UserKnownHostsFile ~/.ssh/known_hosts.dual.linux
  Hostname $REALHOSTNAME

$REALHOSTNAME물론 실제 호스트 이름 또는 IP 주소로 바꿉니다 . ( "호스트 이름"다음에 IP 주소로 확인되는 항목을 선택하는 한 선택하는 것은 중요하지 않지만 일반적인 원칙에 따라 IP 주소보다 호스트 이름을 선호합니다.)

그런 다음 ssh myserver.linuxssh myserver.osx따라서 다른 호스트 키를 가질 수 있지만, 당신은 여전히 검사를 얻을. Linux가 작동하고 OS X를 입력하거나 그 반대의 경우에는 경고가 표시됩니다 (원하는 영향이라고 생각합니다).

이 문제가 발생하면 주 known_hosts파일에 둘 중 하나와 일치하지 않는 문제가 있는지 확인하여 $REALHOSTNAME대신 입력 myserver.osx하면 경고가 표시됩니다. :-) 나는 뭔가를 넣어서 그렇게 할 것이다.

<ip-address-of-github.com> $REALHOSTNAME

/etc/hosts에서 다음을 수행 ssh $REALHOSTNAME하고 새 키를 수락 한 다음 해당 항목을 가져옵니다.

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