요약
- SSH는 서버 접근 등의 통신을 암호화하고 보안성을 강화하기 위해 사용한다.
- 서버, 클라이언트의 비대칭키들을 통해 자격증명을 하고, 증명을 통해 발생한 세션키를 통해 통신을 암호화 한다.
- 원리를 이해하면, 접근을 위한 불필요한 단계들을 줄일 수 있다.
내용
SSH 정의
- SSH(Secure Shell)은 네트워크 및 운영체제를 접근하는 데 사용된다.
- 일반적으로 포트는 22을 사용한다.
- SSH키는 기능적으로 패스워드와 유사하며, 공개/개인키를 통해 자격 증명을 한다.
- 비대칭키를 사용해서 로그인 증명을 하고, 대칭키를 생성하여 통신에 사용한다.
- SSH키는 자동화된 프로세스와 SSO(싱글 사인온) 구현에 사용된다.
SSH 구성
- id_rsa.pub : 클라이언트 공개키 (비대칭키, 인증키) (ssh-keygen으로 생성)
- id_rsa : 클라이언트 개인키(비대칭키, ID키) (ssh-keygen으로 생성)
- ssh_host_ecdsa_key.pub : 서버 공개키 (비대칭키, 호스트키) (/etc/ssh에 존재)
- ssh_host_ecdsa_key : 서버 개인키 (비대칭키, ID키) (/etc/ssh에 존재)
- known_hosts : 처음 연결한 호스트의 경우, 위의 호스트키를 해당 파일에 저장해놓음
- config 파일 : ssh 사용 시 설정 정보 저장, 접근해야 할 호스트 정보를 저장할 수 있다.
- session-key : 개인/공개키를 통해 공유 비밀키 생성, 통신에 사용하는 키 (대칭 키)
- authorized_keys : 서버에 클라이언트의 공개키가 저장되는 곳
SSH 원리
- 클라이언트(이하 클라)와 서버 각자는 공개키와, 개인키를 생성 또는 소유하고 있다.
- 클라는 생성 위치, 서버는 /etc/ssh에 존재한다.
- 이후 통신에 사용할 세션키를 생성하기 위해 서버,클라간 키 교환을 수행한다.
- 클라, 서버는 서로 공개키를 교환한다. 처음 교환일 경우 fingerprint 생성을 물어보고, known-hosts 에 등록된다.
- 클라는 클라의 개인키와, 서버의 공개키를 가져와 방정식을 통해 세션키를 생성한다.
- 서버는 서버의 개인키와, 클라의 공개키를 가져와 방정식을 통해 세션키를 생성한다.
- 이 때 세션키 값은 서로 동일한 대칭키가 된다.
- 세션키 값을 통해 암호화된 통신을 수행한다.
SSH 명령어
- 생성
- ssh-keygen -t rsa : rsa알고리즘으로 키 생성, id_rsa.pub, id_rsa 가 생성 된다
- 삭제
- ssh-keygen -R [hostname] : known_hosts 파일에서 관련된 호스트파일 정보를 지움
- FingerPrint 조회
- ssh-keyscan -l -f id_rsa.pub : 공개키의 FingerPrint 값을 보여줌
- ssh-keyscan -l -E md5 -f id_rsa.pub : 공개키의 md5 형태의 FingerPrint 값을 보여줌
- 로깅
- last -f /var/log/wtmp - 최근 접근 기록을 보여줌
- last -f /var/log/btmp - 최근 접근 실패 기록을 보여줌
- lastlog - 모든 사용자의 마지막 접속 정보를 알려줌
SSH 실 사용 및 오류 해결 법
- Ansible msg: “Failed to connect to the host via ssh: Host key vertification failed”
- Fingerprint 즉 known_hosts에 등록이 되어 있지 않아 발생하는 문제
- 호스트에 처음 접근 시 ECDSA key fingerprint is .. 등의 문구를 통해 등록 여부를 질의하며 yes를 입력하지 못하기 때문에 문제 발생
- 해결 방법 1- ansible.cfg 에 설정 추가
[defaults] host_key_checking = True
- 해결 방법 2- 호스트 키를 스캔하여 known_hosts에 등록
ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts
- 일반 Host key verification failed… 발생
- known_hosts에서 같은 호스트에 대해 공개키 값이 변경됨 ( 서버,호스트의 변경 발생 )
- known_hosts 파일에서 관련된 키 값을 삭제하고, 재접속하여 갱신이 필요
ssh-keygen -R [hostname]
을 통해 관련된 키 값 삭제
배울 점
- SSH통신에 대해 남에게 설명할 수 있을 정도의 이해도를 가짐
- 키 생성, 변경, 삭제 등에 대해 이해를 했기 때문에 추후 앤서블로도 key 라이프사이클을 관리할 수 있음
추후 해야할 것
- SSO(싱글 사인온)에 대해 공부해볼 것
- Key 라이플 사이클에 대해서 생각하고 관리할 수 있는 방안 생각해보기
- ssh-keygen, last, lastlog 명령어 옵션 정리하기
참고자료
728x90
반응형
'컴퓨터 이론 > Network ,보안' 카테고리의 다른 글
VLAN 정리 (0) | 2022.11.21 |
---|---|
[보안] SSH 원격 호스트 접속 (0) | 2022.03.04 |