서버 인증
사용자가 서버를 인증하는 단계
클라이언트가 서버에 처음 접속 시도 시 연결을 진행할지 여부를 물어봄
yes를 선택 시 서버의 /etc/ssh에 있는 공개키 값을 클라이언트의 .ssh/known_hosts에 추가
클라이언트에서 난수값을 생성 > 해시값으로 변환 > 클라이언트에 저장 > 공개키로 해시값 암호화 > 서버에 전송
암호화된 해시값을 전달받은 서버는 비밀키로 복호화 > 클라이언트로 다시 전송
클라이언트는 저장해 두었던 해시값과 서버로부터 받은 해시값을 비교하여 서버를 인증
서버 인증을 위해 서버에서 key-pair를 만들고 이를 사용하여 사용자가 서버를 인증
사용자 인증
서버가 사용자를 인증하는 단계
비대칭키를 생성 (ssh-keygen 명령어 활용)
비밀키: 클라이언트 소유(.ssh/id_rsa)
공개키: 서버 .ssh/authorized_keys 에 추가
서버에서 난수값을 생성 > 해시값으로 변환 > 서버에 저장 > 공개키로 해시값 암호화 > 클라이언트에 전송
암호화된 해시값을 전달받은 클라이언트는 비밀키로 복호화 > 서버로 다시 전송
서버는 저장해 두었던 해시값과 클라이언트로부터 받은 해시값을 비교하여 사용자를 인증
known_hosts 파일
클라이언트에서 ssh를 사용하여 서버에 접속할 때, 서버의 공개 키가 클라이언트의 .ssh/known_host 파일에 저장된다.
known_host 파일에 서버의 공개키가 저장되어 있다면, 서버에 대한 검증없이 접속이 가능해진다.
실습
클라이언트 001 211.183.1.101
서버 002 211.183.1.102
1
ssh로 서버에 접속하려고 하자 "Are you sure you want to continue connecting (yes/no)?"라고 묻는다.
클라이언트 측 .ssh/known_hosts에 키가 추가된 것을 확인할 수 있다.
하지만 이렇게 매번 yes를 입력하여 추가를 할 수 없으니 ssh-keyscan을 이용하여 .ssh/known_hosts에 추가할 수 있다.
# ssh-keyscan 211.183.1.102 >> .ssh/known_hosts
2
매번 패스워드를 입력해주기에 귀찮으니 ssh 접속 시 키를 사용하여 접속할 수 있도록 해보자.
클라이언트에서 ssh-keygen 명령어를 통해 키를 생성한다.
# ssh-keygen -q -N "" -f .ssh/test.pem
해당 명령어를 사용하면 엔터없이 바로 키가 생성된다.
-N: passpharse를 지정하는 옵션
-f: name을 지정하는 옵션
test.pem.pub은 개인키(비밀키)이므로 클라이언트가 가지며 공유해서는 안된다.
test.pun은 공개키이므로 서버의 .ssh/authorized_keys에 등록해야 한다.
이를 직접 cat을 이용해 화면에 띄워진 키 값을 복사하여 붙여 넣어줘도 되지만 ssh-copy-id를 사용해보도록 하자.
# ssh-copy-id -i .ssh/test.pem root@211.183.1.102
확인을 해보자.
키 교환이 모두 되었기에 이제 키를 가지고 비밀번호 입력없이 ssh 접속이 가능하다.
# ssh -i .ssh/test.pem 211.183.1.102
정리
<출처>
https://my-t-space.tistory.com/31
'Study' 카테고리의 다른 글
[DB]PostgreSQL 백업 (1) | 2024.10.08 |
---|---|
NFS 서버 (0) | 2023.06.08 |
2023 정보처리기사 필기 합격 후기 (0) | 2023.03.17 |
Vagrant 사용 (0) | 2023.02.06 |
DevOps & CI/CD (0) | 2023.01.05 |