자주 변경되는 IP를 가진 상자에 SSH


22

IP를 자주 변경하는 클라우드 박스가 있습니다.

나는 호스트 이름을 사용하여 ssh하지만이 오류 메시지로 인해 서버가 시작될 때마다 known_hosts 파일을 편집해야합니다.

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

내가하고 싶은 것과 관련된 보안 위험 및 이와는 별도로이 오류를 무시하거나 known_hosts 파일을 자동으로 덮어 써서 항상 직접 편집 할 필요는 없습니까?

답변:


20

ssh_config 파일을 편집하고 다음 줄을 변경하십시오.

CheckHostIP no

CheckHostIP의 기본값은 'yes'입니다. 이것이하는 일은 실패한 종류의 검사를 수행하는 것입니다. 끄면 IP가 가변적임을 신뢰하고 호스트 이름에 대해 키 검사를합니다.


2
이렇게하면 연결할 모든 서버에 대한 보안 기능이 비활성화 됩니다. 이는 매우 나쁜 습관입니다. 대신 이 문제가 발생할 것으로 알고있는 특정 호스트에 대해서만 이 옵션을 사용 하거나 특정 호스트에 대해 다시 HostKeyAlias ​​옵션을 사용해야합니다.
zaTricky

@zaTricky "매우 나쁜 연습"? 뭐가 그렇게 극단적 인거야? 나는 그것이 훨씬 안전하다고 생각합니다. 그것은 단순히 개인 취향입니다. IP 대신 호스트 이름에 키를 고정하면됩니다. https의 경우 HPKP는 비슷하게 작동하며 모두 안전하거나 지나치게 안전하다고 말합니다.
kubanczyk

@kubanczyk 이것은 세계적인 환경으로 만들고자한다고 말하고 있습니다. 제가 지적한 호스트 지정에 관한 조언은 없습니다
zaTricky

25

추가 : 해당 이름에 대해서만 CheckHostIP 검사를 비활성화 할 수 있습니다 .

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

5
이는 IP 검사 비활성화로 인한 보안 영향을 줄이는 가장 좋은 옵션입니다.
Espo

3

여기에 많은 답변이 효과가 있지만 기술적으로는 해결 방법입니다. OpenSSH에는 이미 다음과 같은 기능이 내장되어 있습니다 HostKeyAlias.


.ssh / config 파일에서 HostKeyAlias <alias>호스트 구성에 추가하십시오 .

host myserver.example.com
HostKeyAlias myserver.example.com

이를 통해 서버에 연결 하면 로컬 참조에 myserver.example.com호스트 이름 또는 IP 주소를 사용하지 않습니다 . 해당 서버에 연결할 때 항상 지정된 HostKeyAlias 사용합니다. 나를 위해 호스트 이름을 사용하는 것이 합리적이지만 물론 원하는 별칭을 사용할 수 있습니다.


동적 호스트에 대한 일반적인 구성은 다음과 같습니다.

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

이것은 여러 서버가 동일한 호스트 키를 가지고있는 일부 모호한 시나리오에서도 사용될 수 있습니다 (일반적으로 그렇지 않아야 함). 그러면 중복 항목이 방지됩니다. 나중에 키가 합법적으로 변경되면 여러 항목을 바꾸거나 삭제할 필요가 없습니다. 하나만 Gitlab Geo 서버가 이에 대한 좋은 예입니다.


known_hosts 파일을 지우는 것과 관련하여 오래된 known_hosts 항목 유지 / 제거와 관련된 다른 질문 / 답변을 살펴 보는 것이 좋습니다. 예를 들어, .ssh / known_hosts 파일을 관리하는 방법을 참조하십시오 . user1953828의 답변에 특히 감명을 받았지만, 많은 공감대가 아직은 없습니다. :)


이것은 8 년 후 답변 된 정답에 대한 당일 답변의 가치를 보여줍니다.
parity3

2

이 문제를 해결하기 위해 이러한 회피 옵션을 사용합니다. (내 호스트의 공개 키는 자주 재생성되므로 IP 및 키 검사가 제거됩니다)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

키가 동일하게 유지되지만 IP가 변경되는 경우에도이를 사용할 수 있습니다.

ssh remoteServerName -l username -o "CheckHostIP=no"

서버가 자주 호스트 키를 변경하는 경우 호스트 키 서명 설정을 고려해야합니다.
Cameron Tacklind

1

경고를 무시 하기 위해 ssh 클라이언트 구성 (예 : 연결하는 시스템의 ~ / ssh / config 파일)에서 StrictHostKeyChecking = no를 설정할 수 있습니다 .


1

당신은 둘 수 있었다 CheckHostIP no당신에 ~/.ssh/config파일하지만 잎 당신은 스푸핑 공격을 엽니 다. 걱정하지 않으면이 설정으로 known_hosts확인 을 해제해야합니다 .


0

known_hosts임시 AWS 머신에 연결할 때 파일에 지문을 추가하지 않습니다 . 나는 같은 명령을 사용한다

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

그들에게 연결합니다. "알려진 호스트 목록에"컴퓨터를 추가 할 것인지 묻지 않습니다. 컴퓨터 10.0.0.5의 IP 주소와 secret.pemSsh 키의 전체 경로로 바꾸십시오. 10.0.0.5이 (가) 추가되었다는 경고가 계속 표시 되지만이 (가) 실제로 사라졌습니다 /dev/null. 나는 종종 내 별칭을 설정하기에 충분히~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

ssh ec2-user@example.com지문을 확인하는 데 어려움을 겪은 기계에 대한 유형 명령을 예약했습니다 .


이것은 당신이 오직 한 번에 연결 서버에 대한 의미가 있습니다 -하지만 오래된 항목을 제거하는 더 나은 방법이 있습니다 - 당신은하지 않아야 한다는 더러운 당신의에서 known_hosts 파일이 얼마나 염려. 아마도 별명이 가져다 준 가치보다 별명을 만드는 데 훨씬 많은 시간과 에너지를 소비했을 것입니다.
zaTricky

-2

known_hosts를 읽기 전용으로 설정하십시오.


실용적인 옵션을 쉽게 사용할 수있게되면 기능이 작동하지 않습니다. :-/
zaTricky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.