1. SSH 프로토콜 인증이란?
ssh인증은 클라이언트와 서버가 서로 인증하는 단계입니다. 클라이언트와 서버가 SSH프로토콜로 통신을 할 때 신뢰할 수 있는 호스트인지 확인하는 과정입니다.
2. SSH 로컬 데이터베이스
클라이언트와 서버는 ssh프로토콜 인증과정에서 ssh 로컬 데이터베이스를 사용합니다. 로컬 데이터베이스는 각 호스트의 볼륨에 저장되어 있고 디폴트 경로는 $HOME/.ssh입니다.
3. 클라이언트가 서버를 인증하는 방법
클라이언트는 내가 접속하는 ssh서버가 믿을만한 서버인지 확인합니다. 신뢰하는 ssh서버 공개키는 로컬 데이터베이스의 known_hosts파일에 저장되어 있습니다. 클라이언트는 known_hosts파일에 저장된 서버공개키와 접속하려는 서버 공개키를 비교합니다. 공개키가 서로 불일치하면, 클라이언트는 서버를 신뢰할 수 없다고 판단하여 연결을 중단합니다.
cat ~/.ssh/known_hosts
서버 공개키는 ssh-keyscan으로 조회할 수 있습니다. 서버 공개키는 알고리즘 유형마다 존재하므로 여러 개일 수 있습니다.
ssh-keyscan {서버 host}
만약 known_hosts파일에 서버 공개키가 저장되어 있지 않으면, 아래 그림처럼 공개키를 known_hosts파일에 저장할지 프롬프트가 나옵니다. yes를 입력하면 접속하려는 서버 공개키가 known_hosts파일에 저장됩니다.
ssh root@{서버 host}
4. 서버가 클라이언트를 인증하는 방법
서버가 클라이언트를 인증하는 방법은 대표적으로 2개가 있습니다.
- 서버계정 비밀번호
- 공개키 인증(권장)
4.1 서버계정 비밀번호
비밀번호 인증방식은 말 그대로 서버계정과 비밀번호로 인증하는 것입니다. 비밀번호가 노출되면 서버계정이 노출되는 것이기 때문에 추천하지 않는 방법입니다. 특히, root계정이 유출되면 위험합니다.
4.2 공개키 인증방식
공개키 인증 방식은 클라이언트의 공개키를 서버의 SSH 로컬 데이터베이스에 저장하여 인증을 수행하는 방법입니다. 서버는 클라이언트의 공개키를 $HOME/.ssh/authorized_keys 파일에 저장합니다. 이 파일에 저장된 공개키와 클라이언트가 제공하는 키가 일치하면 인증이 완료되어 서버에 접속할 수 있게 됩니다.
4.3 공개키 인증방식이 권장되는 이유
클라이언트의 개인키가 유출되면 누구나 서버에 접속할 수 있습니다. 하지만 공개키인증이 비밀번호보다 안전하기 때문에 사용을 권장합니다. 비밀번호 인증은 공개키 인증방법보다 공격범위가 크고 다른 서비스에 재사용되는 위험이 있습니다.
- 비밀번호 무작위 대입공격(brute force)에 안전
- 비밀번호는 유출되면 다른 서비스에서도 동일한 비밀번호로 무단 접근이 가능
- 악성코드(예: 키로거 등)에 안전
공개키 인증방법을 안전하게 사용하려면 공개키를 주기적으로 키를 교체하고 IP접근 제한등을 적용할 수 있습니다.
4.4 사용사례
공개키 인증방식은 많은 서비스가 사용자 인증을 할 때 많이 사용합니다. 대표적으로 github이 있습니다. git은 git clone, push 등의 액션이 발생할 공개키기반으로 사용자 인증을 할 수 있습니다.
'전공영역 공부 기록' 카테고리의 다른 글
예제로 살펴보는 쿠버네티스 보안 (0) | 2024.08.15 |
---|---|
SSH프로토콜 원리 (0) | 2024.08.03 |
wireshark IP를 이름으로 변경하는 방법 (0) | 2024.08.03 |
ssh키쌍으로 데이터 암호화, 복호화 (2) | 2024.07.28 |
Ansible mysql 플러그인을 잘못 사용해서 발생한 오류 (0) | 2024.07.26 |