ECDSA 호스트 키에 대한 경고를 수정하는 방법


287

로 Ubuntu 서버에서 암호가없는 SSH를 설정하려고 ssh-copy-id myuser@myserver하는데 오류가 발생합니다.

경고 : 'myserver'의 ECDSA 호스트 키가 IP 주소 '192.168.1.123'의 키와 다릅니다.

이 원인은 무엇이며 어떻게 해결합니까? .ssh원격 컴퓨터 에서 디렉토리를 삭제하고 ssh-keygen -R "myserver"로컬로 실행 하려고 시도했지만 오류가 해결되지 않습니다.


필자의 경우 server (ip) 바인딩을 도메인과 변경 한 다음을 변경합니다 The ECDSA host key for server has changed. 내 방법은의 도메인에 대한 관련 캐시 문자열을 제거하는 것입니다 ~/.ssh/known_hosts. 그런 다음 ssh가 작동합니다.
닌자

답변:


415

192.168.1.123로컬 머신 에서 캐시 된 키를 제거하십시오 .

ssh-keygen -R 192.168.1.123

14
집에서 SSH로 로그인 할 때 직장에서 데비안 서버를 새로 설치하는 데 도움이되지 않았습니다. 또한 대답은 꽤 간결합니다.
Chris K

/home/wf/.ssh/known_hosts가 업데이트되었습니다. 원래 내용은 /home/wf/.ssh/known_hosts.old로 유지됩니다. "경고 : IP 주소 'xxxx'에 대한 ECDSA 호스트 키를 알려진 호스트 목록에 영구적으로 추가했습니다." 가 표시됩니다. 그리고 그것은 작동하는 것 같습니다
Wolfgang Fahl

13
키를 제거하는 대신 업데이트 할 수 있습니다. ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hosts그 후에 사용 하면 처음 호스트에 연결할 때 새 키를 확인할 필요가 없습니다.
Alex

2
성공하지 못한 사람 : 동일한 IP의 여러 번을 등록했습니다 : 1 / 상기 IP 주소 (xx.xx.xx.xx), 도메인 (tomsihap.fr), 공급자가 제공 한 vps 서버 주소 (vpsxxx.ovh.net). 이들 각각에 대한 ssh-keygen -R이 작업을 수행했습니다.
tomsihap

나를 위해 일했지만이 명령을 실행 해야하는 호스트가 혼란 스럽습니까? 답은 오류가 발생한 것입니다. 두 번째 질문과 답변은 더 분명하지만, 어떤 경우에 ssh-keygen -R로 전달할 주소입니까? 오류 설명에 표시된 주소입니다.
Russ Bateman

63

내 경우 ssh-keygen -R ...에는 경고를 수정하지 않았습니다. 나는 다음과 같은 추가 정보를 얻었습니다.

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

나는 단순히 ~/.ssh/known_hosts8 행 ( "불쾌한 키")을 수동으로 편집 하고 삭제했다. 다시 연결을 시도했지만 호스트가 영구적으로 추가되었으며 그 후 모든 것이 정상이었습니다!


2
매력처럼 작동합니다. sed -e '8d' /home/myuser/.ssh/known_hosts줄 번호 8와 파일 이름을 시스템에 표시된 파일 이름으로 바꾸어 한 줄로 이것을 수정할 수 있습니다.
Alex P. Miller

이 접근 방식의 내 문제는 known_hosts:8인덱스가 0 인 값을 나타내는 지 여부가 약간 혼란 스럽다는 것 입니다. 이것이 1 : 1 매핑이라는 것을 알게
Daniel F

나는 당신이이 경우 2022 년과 같은 비표준 포트를 사용하는 경우 이런 발견, 당신은 할 필요가ssh-keygen -R [hostname]:2022
알렉산더 Malfait

19

LAN 컴퓨터와 두 개의 웹 호스팅 계정 사이에서 많은 ssh-ing을 수행하므로 모든 종류의 확률을 정렬하고 SSH 문제로 끝났습니다 ssh -v.

이 문제를 방금 해결하고 답변에 만족하지 않으면 서 "왜"자신을 정말로 알고 싶었습니다.

내 경우의 트리거는 : 직장에서 새 서버 OS를 설치하고 openssh-server 패키지를 설치하면 직장 서버에서 새로운 호스트 키 세트가 생성되었습니다. 이전에는 모든 서버 OS가 Ubuntu였으며 이번에는 데비안으로 변경되었습니다 (권한에 미묘한 차이가있는 것 같습니다).

모든 OS가 Ubuntu이고 서버의 OS를 다시 설치하면 첫 번째 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
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

그런 다음 ~/.ssh/known_hostsssh를 시작하는 컴퓨터에서 열어서 해당 줄을 삭제하고 다시 연결하면 다음과 같은 일이 발생합니다.

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

: 11122에 관한 그 비트는 방화벽에서 SSH를 라우팅하는 포트 번호입니다.

이전 우분투 서버에서 백업을 확인한 후 새로운 데비안 설치와는 다릅니다.

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

그렇습니다. 최근에 호스트는 ecdsa 키를 사용하기 시작했습니다. 요즘 우분투의 변경 사항을 기반으로 업데이트를 비난합니다. 내가 믿을 수있는 견고한 리눅스 OS에서 우분투의 변화는 이번에 데비안을 설치 한 이유이다.

ecdsa 에서 security.SE q / a를 읽었 으며 이미 sshd_config새 데비안 서버 에서 해당 라인을 제거했습니다 . (도망 service ssh restart)


2
멋진 병렬 비교 블록의 경우 +1 "우수한 리눅스 OS에서 우분투의 변화"라는 URL을 추가 할 수 있습니까?
bgoodr

@ bgoodr 그것은 내 의견이며 지난 몇 년 동안 내 자신의 RAID 파일 서버를 여러 번 설정 한 것에 근거합니다. : / 대답을 위해 무너지지 만 인터넷 검색을 시작 ubuntu debian server하면 내가 무슨 뜻인지 알 수 있습니다.
Chris K

1
@ChrisK 당신은 상사입니다. 상세하면서도 간결한 답변에 감사드립니다.
sargas

6

동적 주소 지정을 사용할 때 IP 주소가 항상 변경되므로 프롬프트가 항상 발생합니다. 고정 IP를 사용하여 키를 한 번만 추가하면됩니다.


1
좋은 지적, 누군가 동적 IP를 언급 한 곳을 놓쳤습니까?
Chris K

6

ssh-keygen -f "/root/.ssh/known_hosts"-R 192.168.1.123

known_hosts.old 아래의 기존 키를 바꾸고 새 키를 만들어야합니다. 이 솔루션은 동일한 시나리오에서 저에게 효과적이었습니다.


3

~ / .ssh / config에 다음 줄을 추가하여 모든 .local 주소에 대한 엄격한 호스트 검사를 비활성화했습니다. (DHCP 주소 할당을 사용하면 로컬 컴퓨터의 IP 주소가 항상 변경됩니다)

host *.local
    StrictHostKeyChecking no

그래도 여전히 경고가 표시됩니다.


2

같은 사용자를 연결에 사용하고 있습니까?

사용자 John 과 같은 로컬 PC에 로그인하고 사용자 Adolf @ B 와 같은 서버 B에 연결 했는데 모든 것이 정상인 경우 사용자 Jane 과 같은 로컬 PC에 로그인 하고 서버에 연결해도 모든 것이 정상임을 의미하지는 않습니다. B 사용자와 같은 아돌프 @의 B .

당신의 PC에서 사용자 베다와 같은 서버 B에 로그인하려면 암호가없는, 모든 PC의에서이 명령을 시도 :

ssh-keygen -t rsa

이 명령은 키를 생성하고 파일에 키를 저장합니다. 암호를 비워 두십시오 .

ssh Beda@B mkdir -p .ssh

이 명령은 디렉토리가 없으면 작성합니다. 그렇지 않으면 오류 메시지를 인쇄하지 마십시오.

cd ~/.ssh

이 명령은 디렉토리를 사용자 홈 디렉토리 ./ssh로 변경합니다.

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

이 명령은 파일 id_rsa.pub (공개 키)을 서버의 authorized_keys 에 인쇄 합니다.

중요 : Beda는 연결중인 서버의 사용자 이름이고 B는 서버 IP입니다.

이제 비밀번호 나 비밀번호 문구없이 서버 B에 연결할 수 있습니다.

ssh Beda@B

1
또는 ssh-copy-id를 사용하여 별도의 번거 로움없이 인증 된 키 파일을 id_rsa.pub 키로 채 웁니다.
BlakBat

1

여기 실 이 도움이 될 수 있습니다.

기본적으로 해당 호스트의 RSA 및 ECDSA 키를 모두 제거한 다음 이 충돌을 일으키지 않는 방식으로 파일에 ssh-keyscan다시 넣는 데 사용 합니다 known_hosts. 나는 같은 문제가 있었을 때 나를 위해 일했다.


1

질문 :이 원인은 무엇입니까? ...?

따라서 ssh 서버 호스트 키가 변경되었습니다. 변경의 원인은 무엇입니까? 말하기 어렵다. 다음은 몇 가지 추측입니다.

  • myserver의 sshd가 ECDSA 키를 사용하기 시작 했으므로 새로운 키 유형입니까?
  • myserver가 최근에 다시 설치 되었습니까?
  • myserver의 sshd가 최근에 다시 삽입되었으므로 새로운 ssh 호스트 키가 생성 되었습니까?
  • 누군가 sshd 호스트 키를 다시 생성하거나 교체 했습니까?
  • 다른 호스트가 해당 IP 주소에 응답하도록 myserver의 IP 주소가 변경 되었습니까?

질문 : ... 어떻게 고치나요?

다른 사람이 이미 답변 했으므로 계정에서 캐시 한 myserver에 대해 캐시 된 ECDSA 호스트 키를 제거하십시오.


2
좋은 조언이지만 실제로 질문에 대답하지는 않습니다. 질문에 대답하려고 시도조차하지 않습니다.
boatcoder

1

이 오류는 오랫동안 나를 귀찮게했습니다. 어떤 이유로 그것은 내가 할 것인지의 차이를 만들었습니다

ssh host

또는

ssh host.domain

https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh

그런 다음 구성 파일을 변경하는 옵션을 알려줍니다. 프로세스 자동화에 대한 내 스크립트 https://askubuntu.com/a/949731/129227을 참조하십시오 .


1
구성 값을 사용 CanonicalizeHostname하고 CanonicalDomains엄격한 검사를 제거 피할 것이다 및 SSH를 동일하게 호스트와 여기서 host.domain을 고려해야 할 것입니다.
BlakBat

0

Secure Shell을 제거하고 다시 설치하여 크롬 북 에서이 문제를 해결했습니다 ... 매력처럼 작동했습니다.


이것은 과잉입니다. 내 대답에서 더 간단한 해결책을 여기에서보십시오.
Alex Yursha

0

known_hostsChrome OS 에서 알려진 호스트 지문을 파일 에서 제거하는 방법은 다음과 같습니다 .

연결이 실패하면 ssh 출력에서 ​​문제가되는 호스트 항목의 색인을 찾으십시오. 예를 들어 아래의 행에서 문제가되는 색인은 7입니다 .

Offending ECDSA key in /.ssh/known_hosts:7

Secure Shell 창의 JavaScript 콘솔 ( CTRL+ Shift+ J)을 열고 다음을 입력 INDEX하여 적절한 값 (예 : 7 )으로 바꾸십시오 .

term_.command.removeKnownHostByIndex(INDEX);

이 솔루션은 Leo Gaggl 's Blog 에서 빌 렸습니다 .

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