귀찮게하기/Infra

인프라팀 귀찮게 안하기 - SSH

게임이 더 좋아 2024. 11. 5. 20:03
반응형
728x170

Secure Shell 물어보기 전에 내가 확인할 것을 확인했나?

ACL 및 포트 확인 필수

 

 

3줄요약

telnet은 평문으로 통신하는 반면에
SSH는 암호화 통신을 지원함
안전한 서버와의 통신을 지원함

 

 

긴 설명

3줄 요약과 같음

 

 

 

호스트 인증

 

서버에 접속하면 그 때마다 호스트 인증을 수행함

먼저 서버 고유의 호스트 키(공개 키)를 서버로부터 클라이언트로 전달

클라이언트 쪽에서 저장하고 있는 호스트 키( known_hosts )와 비교해 일치 여부 확인

하지만 처음 접속할 때는 연결할 서버의 호스트 키를 가지고 있지 않기 때문에 키를 비교하지는 않는다

대신 대상 호스트가 등록되어 있지 않다는 메시지 표기함

fingerprint 를 등록하면 서버의 호스트 키가 ~/.ssh/known_hosts 파일에 등록(클라이언트)됨

사전에 서버 관리자에게 핑거 프린트를 받고 처음 접속할 때 확인하는 것이 정석!! -> 하지만 아무도 안함

다음 번 접속 시 부터는 fingerprint 표시가 나오지 않음

호스트의 공개키가 known_hosts 파일에 저장된 값과 다르면 메시지가 표시되고 강제로 접속이 끊어짐

OpenSSH 를 설치하면 /etc/ssh 디렉터리 밑에 호스트의 공개 키와 비밀 키가 만들어짐

호스트 인증에 사용될 것이기 떄문에 외부 유출 방지해야함

서버 호스트 키의 핑거 프린트를 확인하려면 ssh-keygen 명령에 -l 옵션을 붙임

-> 서버 운영자는 서버를 접속하려는 클라이언트에게 핑거 프린트를 제공함으로써 클라이언트가 정상적인 서버 접속을 시도하는지 알 수 있음

 

 

사용자 인증

호스트 인증이 끝나면 사용자 인증 수행

기본적으로 공개키 인증 -> 패스워드 인증 순으로 진행

공개 키 인증에서는 통신하는 호스트 간에 하나의 공개 키와 비밀 키 쌍을 사용해 인증

공개 키 인증을 하려면 미리 클라이언트의 공개 키를 서버에 등록해야함

-> 즉, 나의 키가 접속하려는 서버에 등록되어 있어야 함

 

 

공개키 인증 순서

서버에 공개 키 등록

접속 시 사용자의 키가 사용가능한지 체크섬을 사용자 쪽에서 공개 키와 사용자 명으로부터 만들어진 데이터 전자 서명

위의 데이터와 전자 서명이 서버로 전송

서버 쪽에서 데이터와 서명 검증

검증에 성공하면 로그인 허용

공개 키 인증 준비가 되지 않았을 때, 패스워드 인증이 허용되어 있으면 패스워드 인증이 이루어짐

대상 서버에 등록된 패스워드를 올바르게 입력하면 로그인 가능

 

 

공개 키 생성

공개 키와 비밀 키의 키 쌍을 만드려면 ssh-keygen 명령을 사용함

대부분 rsa 사용해서 생성함

이렇게 작성한 키 중 공개키를 대상 서버에 등록한다.(접속하고 싶은 서버)

~/.ssh/authorized_keys 파일에 추가하면 됨

ssh-copy-id 커맨드를 통해 등록할 수도 있음

728x90
반응형
그리드형