반응형
StrictHostKeyChecking No는 SSH(Secure Shell) 클라이언트에서 서버와의 연결을 설정할 때, 호스트 키(host key)를 자동으로 신뢰하도록 설정하는 옵션입니다. 이 옵션은 중간자 공격(MITM)을 방지하기 위해 호스트 키를 확인하는 과정을 비활성화합니다.
기본 동작
SSH 클라이언트는 서버에 처음 연결할 때, 서버의 공개 키를 로컬의 ~/.ssh/known_hosts 파일에 저장하고 이후 연결에서 이 키를 검증합니다.
- 처음 연결 시:
- 서버의 키를 사용자에게 보여주며, 신뢰 여부를 묻습니다.
The authenticity of host 'example.com (192.168.1.1)' can't be established. RSA key fingerprint is SHA256:xyz123... Are you sure you want to continue connecting (yes/no)?
- 서버의 키를 사용자에게 보여주며, 신뢰 여부를 묻습니다.
- 추후 연결 시:
- 로컬에 저장된 키와 서버 키를 비교해 일치 여부를 확인합니다.
StrictHostKeyChecking No 동작 방식
StrictHostKeyChecking No를 설정하면:
1. 자동으로 호스트 키를 신뢰합니다.
- 처음 연결하는 서버라도 사용자에게 신뢰 여부를 묻지 않고 연결을 설정합니다.
- 서버의 키가 변경되어도 알림 없이 연결을 시도합니다.
설정 방법
- 명령줄에서 사용
- -o 옵션을 사용해 일회성으로 설정.
- ssh -o StrictHostKeyChecking=no user@hostname
- SSH 구성 파일에서 설정
- SSH 클라이언트 설정 파일(~/.ssh/config 또는 /etc/ssh/ssh_config)에 추가:
Host * StrictHostKeyChecking no
- Host *는 모든 서버에 대해 이 설정을 적용합니다.
- SSH 클라이언트 설정 파일(~/.ssh/config 또는 /etc/ssh/ssh_config)에 추가:
장점
- 자동화된 스크립트에 유용
- 서버 키를 확인하는 대화형 입력을 피할 수 있어 배포 스크립트, CI/CD 파이프라인 등에 적합합니다.
- 테스트 환경에서 편리
- 테스트 서버와의 빠른 연결을 설정할 수 있습니다.
단점 및 보안 위험
- 중간자 공격(MITM)에 취약
- 서버 키를 확인하지 않으므로 공격자가 중간에 개입해도 이를 감지하지 못합니다.
- 보안 신뢰성이 낮아짐
- 호스트 키가 변경된 경우 경고를 받지 못해 의심스러운 상황을 파악하기 어렵습니다.
대안
보안과 자동화를 모두 만족시키기 위해 StrictHostKeyChecking=no 대신 다음 대안을 고려할 수 있습니다:
1. 호스트 키를 사전에 추가
- 서버의 호스트 키를 미리 ~/.ssh/known_hosts 파일에 추가해 신뢰성을 확보:
ssh-keyscan -H hostname >> ~/.ssh/known_hosts
- 이렇게 하면 서버 키를 자동으로 확인하지 않아도 안전하게 연결할 수 있습니다.
- 한정된 환경에서만 사용
- StrictHostKeyChecking=no는 개발, 테스트 환경처럼 신뢰할 수 있는 네트워크에서만 사용하는 것이 좋습니다.
요약
- StrictHostKeyChecking=no는 SSH 연결 시 서버 호스트 키 확인을 건너뛰는 설정입니다.
- 자동화 작업에는 유용하지만, 보안이 중요한 운영 환경에서는 권장되지 않습니다.
- 신뢰성을 유지하려면 ssh-keyscan과 같은 대안을 활용하는 것이 좋습니다
반응형