Dev

Capistrano 배포시 HostKeyMismatch 발생 오류 해결

February 2, 2018

author:

Capistrano 배포시 HostKeyMismatch 발생 오류 해결

배포를 하는데 HostKeyMismatch 에러가 발생 하면서 서버에 접속 하지 못해 배포가 실패 했습니다. 에러 메시지를 보니 ~/.ssh/known_hosts 파일에서 ec2에 해당하는 항목을 지워서 해결 했지만 앞으로도 계속해서 발생 가능한 문제였습니다.

웹서버를 운영하다보면 AWS의 스팟 인스턴스를 이용해서 많은 트래픽에도 유연하게 대처하는 경우가 있습니다. 스팟 인스턴스의 특성상 서버가 새로 투입되었다가 필요 없어지면 삭제하기를 반복합니다.

서버의 추가와 삭제를 반복하다보면 새로 추가한 서버의 자동 생성된 도메인 이름이나 IP가 예전에 사용했던 서버와 같은 경우가 발생할 수 있습니다. AWS의 자동 생성된 도메인 이름은 다음과 같은 형식입니다.

ec2-00-111-222-333.ap-northeast-2.compute.amazonaws.com

그래서 좀 찝찝 하지만 ec2의 자동 생성된 호스트 이름에 대해서는 known_hosts에 추가하지 않고 관련 체크도 하지 않도록 capistrano 설정에서 아래와 같이 추가했습니다.

server 'ec2-??.ap-northeast-2.compute.amazonaws.com', 
   roles: %{app web}, 
   ssh_options: { verify_host_key: false }

verify_host_key 옵션을 추가한 서버에 배포 할때는 known_hosts 에 추가하지 않고 체크도 하지 않습니다.(capistrano 예전 버전에서는 verify_host_key대신 paranoid 였습니다.)

이렇게 하더라도 서버에 직접 접속 할때면 여전히 know_hosts에 관련된 내용을 추가하려고 하는데요. 이것이 싫다면 .ssh/config에서 특정 호스트에 대해 체크하지 않도록 할 수 있습니다.

Host ec2-*.ap-northeast-2.compute.amazonaws.com
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null

저는 이 옵션을 사용하지 않습니다. 서버 배포는 자주 해서 문제가 발생할 여지가 높고 배포를 급하게 해야될때 이런 문제가 발생하면 당황하게 되지만 서버에 ssh로 접속하는 상황에서는 중복되더라도 known_hosts 파일에서 지워주는게 귀찮지 않았거든요.

원본 게시글의 아마존, iTunes 링크들을 통해 구매를 하시면 제휴(Affiliate) 프로그램에 의해 저에게 일정 금액이 적립될 수 있습니다. ^_____^