
Raspbian OS가 설치된 Raspberry Pi를 로컬 네트워크에 연결하고 SSH 키를 사용하여 SSH 로그인을 설정했습니다. (Raspberry Pi에 고정 IP 할당) 만으로 성공적으로 로그인했습니다 .ssh [email protected]
이제 Raspbian OS를 제거하고 Ubuntu Server(헤드리스)가 포함된 SD 카드를 삽입했습니다.
Raspberry Pi를 켜고 로그인을 시도했지만 오류가 발생했습니다.
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
ERROR: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ERROR: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
ERROR: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
ERROR: It is also possible that a host key has just been changed.
ERROR: The fingerprint for the ECDSA key sent by the remote host is
ERROR: SHA256:asfasfdasdfasfdasfdasdfasdfasdfasdfasfasdf.
ERROR: Please contact your system administrator.
ERROR: Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
ERROR: Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
ERROR: remove with:
ERROR: ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
ERROR: ECDSA host key for 192.168.5.163 has changed and you have requested strict checking.
ERROR: Host key verification failed.
나는 계속해서 다음을 추가했습니다 .ssh/config
.
host 192.168.5.163
StrictHostKeyChecking no
하지만 지금은 알겠어
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:asdfasdfasdfasdfasdfasdfasdfasdfasdf.
Please contact your system administrator.
Add correct host key in /home/joedoe/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/joedoe/.ssh/known_hosts:13
remove with:
ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
[email protected]: Permission denied (publickey,password).
분명히 문제는 동일한 IP 주소에서 두 개의 다른 OS에 로그인하고 싶지만 새로운 Ubuntu OS는 SSH 로그인 설정을 웨이브하지 않으며 어떤 방식으로도 로그인을 허용하지 않는다는 것입니다.
두 OS를 서로 바꿔서 사용할 수 있으려면 어떻게 진행해야 합니까?
답변1
몇 가지 잠재적인 해결책이 있습니다.
가장 쉬운 해결책은 davidgo가 그의 답변에서 제안한 것입니다. 그가 언급했듯이 MitM 공격에 노출될 수 있습니다(가능성은 낮지만 개인적인 상황에서도 좋은 보안을 실천하는 것이 좋습니다).
Host 192.168.5.163
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
/etc/ssh/ssh_host_*key*
약간 더 나은 해결책은 Eugen Rieck이 제안한 것처럼 두 대상 OS 시스템 간에 파일을 동기화하는 것입니다 .
보다 안정적인 방법은 연결할 OS를 구체적으로 결정하는 것입니다. 따라서 잘못된 OS에 연결하면 오류가 발생합니다. 예를 들어 잘못된 OS를 대상으로 하는 경우 ssh를 사용하는 스크립트가 실패할 수 있습니다.
에서 별칭을 효과적으로 사용하면 그렇게 할 수 있습니다 ~/.ssh/ssh_config
.
Host raspbian-pi
Hostname 192.168.5.163
UserKnownHostsFile ~/.ssh/known_hosts_raspbian
Host centos-pi
Hostname 192.168.5.163
UserKnownHostsFile ~/.ssh/known_hosts_centos
그런 다음 에 연결하여 ssh <your_user>@raspbian-pi
Raspbian OS 키를 검색한 다음 Raspberry Pi에서 CentOS로 전환하고 동일한 작업을 수행하여 ssh <your_user>@centos-pi
CentOS 키를 얻을 수 있습니다. 그러면 앞으로 잘못된 OS에 연결할 때마다 호스트 키 오류가 발생하게 됩니다. SSH 명령을 처음 사용할 때 올바른 OS를 사용하는지 확인하여 실수로 알려진 Raspbian 호스트 파일에 CentOS 호스트 키를 저장하지 않도록 하세요.
면책조항: 저는 이 솔루션을 사용한 적이 없으며 테스트할 위치에 있지 않습니다. 그러나 ssh에 대한 저의 이해와 문서에 따르면 올바르게 작동할 것입니다.
답변2
오류에 표시된 지침을 따르면 즉각적인 문제를 해결할 수 있습니다(상자를 전환할 때마다 이 작업을 수행해야 함).
ssh-keygen -f "/home/joedoe/.ssh/known_hosts" -R "192.168.5.163"
현재 겪고 있는 문제는 로그인하는 시스템이 이전에 본 시스템과 다르다는 것을 컴퓨터가 감지하고 중간자 공격을 방지하기 위해 경고가 표시된다는 것입니다.
이를 올바르게 처리하는 방법에는 여러 가지가 있습니다. 여기에는 다음이 포함됩니다.
각 상자에 이름을 설정한
/etc/hosts
다음 IP가 아닌 이름으로 SSH 연결을 참조합니다. 이러한 방식으로 SSH는 서로 다른 서버 지문을 각 이름과 연결합니다.확인 무시(이렇게 하면 공격이 제한될 수 있으므로 위험을 이해하고 이에 대해 편안한 경우에만 수행하십시오.)
-o UserKnownHostsFile=/dev/null
ssh 명령에 추가하여 이 확인을 무시할 수 있습니다.-o StrictHostKeyChecking=no
2a. 다음을 입력하여 하나의 IP에 대한 키 확인만 무시하는 구성을 만들 수 있습니다.
~/.ssh/config
호스트 192.168.5.163 StrictHostKeyChecking UserKnownHostsFile=/dev/null 없음
컴퓨터가 동일한 역할을 수행하지 않는 한 권장하지 않지만 두 서버(그리고 변경한 서버)
/etc/ssh
에서 호스트 키를 동일 하게 만들 수 있습니다.restart sshd
이런 방식으로 두 서버 모두 클라이언트에 동일하게 표시됩니다.
답변3
이를 수행하는 가장 쉬운 방법은 /etc/ssh/ssh_host_*_key*
한 설치에서 다른 설치로 복사하는 것입니다. 이렇게 하면 두 OS 모두에 동일한 호스트 키와 지문이 제공됩니다.
답변4
저는 개인적으로 모든 Linux 서버에 OpenSSH 인증 기관을 사용합니다. 이렇게 하면 새 장치를 설정하고 이전에 터미널 장치(데스크톱, 랩톱 및 점프 호스트)를 조정할 때 많은 번거로움이 줄어듭니다.에 대해 블로그에 올렸습니다.
이 기능은 원래 이러한(비정상적인) 사용 사례를 위해 설계된 것은 아니지만 문제에 대한 대체 솔루션을 제공합니다. CA의 개인 키로 두 호스트 키에 서명하고 공개 부분을 known_hosts
파일에 추가하면 SSH 클라이언트가 불일치에 대해 소리를 지르지 않고 두 호스트 키 세트를 자동으로 신뢰합니다. ssh-keygen -R
하지만 기억된 호스트 키를 미리 제거해야 할 수도 있습니다 .
이는 두 시스템 모두 호스트 키를 분리하여 다르게 유지할 수 있다는 장점이 있으며, 이는 호스트 키(및 인증서 - 인증서에 서명할 때 사용자 정의할 수 있는 "ID" 필드가 있음)로 구별할 수 있는 기능을 제공합니다. 이는 특정 IP 주소에 나타나는 임의의 호스트를 맹목적으로 신뢰할 필요가 없다는 점에서도 안전합니다.
유출된 키로부터 자신을 보호하려는 경우에도 인증서에 서명할 때 "허용된 이름/IP 주소"를 "주체"로 추가할 수 있습니다. 예를 들면 다음과 같습니다.
ssh-keygen -s my_ca -I "RaspOS on RPi" -h -n 192.0.2.0 ssh_host_rsa_key.pub
인증서는~ 아니다192.0.2.0
공격자가 어떤 식으로든 트래픽을 가로채지 않는 한 호스트에서 제공하지 않는 한 신뢰할 수 있습니다.게다가호스트 키와 인증서.
글쎄, 이제 두 OS가 결국 동일한 물리적 시스템에 있기 때문에 두 OS 간에 호스트 키를 복사하는 것이 더 쉽다는 것을 인정해야 합니다.