Study

SSH 인증 과정(Authentication Process)

seomj 2023. 5. 29. 17:32

서버 인증

사용자가 서버를 인증하는 단계

클라이언트가 서버에 처음 접속 시도 시 연결을 진행할지 여부를 물어봄

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://gomu92.tistory.com/15

https://ossian.tistory.com/96

https://my-t-space.tistory.com/31

https://storycompiler.tistory.com/112

https://velog.io/@zdevowl/%EB%A1%9C%EA%B7%B8%EC%9D%B8%EC%97%86%EC%9D%B4-ssh-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0

https://gwonbookcase.tistory.com/56

'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