본문 바로가기
IT & 데이터 사이언스/환경설정 및 기타사항들

[환경설정] SSH Key Authentication 방식으로 접속하기

by 바른 호랑이 2024. 7. 1.
728x90
반응형

안녕하세요. 바른호랑이입니다.

이번 게시글에서는 컴퓨터들 간의 통신에 주로 사용되는 프로토콜인 SSH를 Key Authentication 방식으로 접속하는 방법에 대해서 알아볼 예정입니다.

SSH에서 Key Authentication방식은 공개키(Public Key)와 개인키(Private Key)로 이뤄진 키 쌍을 활용하여 접속자의 신원을 인증하는 방식으로 공개키는 정보를 암호화하고, 개인키는 이를 복호화하는 데 사용됩니다. 이 덕분에 공개키로 암호화된 메시지가 유출되어도 개인키가 없으면 복호화할 수 없기에 보안성이 강화되는 효과를 가지며, 이와 같은 높은 보안성 덕분에 SSH는 통신에 주로 사용됩니다.

서버와 클라이언트는 각각 공개키와 개인키를 가지며, 서버의 공개키는 클라이언트가 최초로 서버에 접속할 때 fingerprint를 남길 것인지 묻는 질문에 yes라 응답하면 클라이언트의 '~/.ssh/knowns_hosts'에 저장됩니다. 서버의 개인키는 특정 경로에 저장되는데 일반적으로 '/etc/ssh/'에 저장되며, 암호화 방식에 따라 RSA 개인키, ECDSA 개인키, Ed25519 개인키로 나뉘며 3개의 키 모두를 서버 자체가 가지고 있게 됩니다.

클라이언트의 공개키와 개인키는 keygen을 통해 클라이언트에서 생성(별다른 설정을 하지 않으면 '~/.ssh/'경로에 저장됨)합니다. 해당 키를 활용하여 접근하기 위해서는 생성된 파일중 '.pub'으로 저장된 공개키를 서버로 전송하고 서버의 '~/.ssh/authorized_keys'에 입력 후 저장해야하며, 그 이후 클라이언트의 '~/.ssh/' 경로에 저장된 개인키를 활용하여 접속하면 됩니다. 이를 그림으로 도식화하면 아래의 그림과 같습니다.

SSH Key Authentication sequence
SSH Key Authentication Diagram

서버의 공개키와 개인키의 경우는 '/etc/ssh/' 경로상에 아래와 같은 파일형태로 저장되며, '.pub' 붙은 파일은 공개키로, 붙지 않은 파일은 개인키로 보면 됩니다. 서버의 공개키의 경우 클라이언트가 처음 연결 시도 시 아래와 문구를 묻게 되는데 이를 'yes'라 동의하면 클라이언트의 '~/.ssh/known_hosts' 파일에 저장되게 됩니다. 

서버에 저장된 서버의 공개키와 개인키 목록
최초 로그인시 서버의 공개키를 저장할 것인지 묻는 질문
저장된 서버의 공개키 확인
서버에 저장된 서버의 공개키

최초 로그인 시에는 ID/PW를 이용하여 접속을 하게 되며, ID/PW를 활용한 로그인 방식은 아래의 게시글을 참고하면 됩니다.

 

※ Ubuntu SSH 설정방법 및 ID/PW로 접속하기

 

[환경설정] Ubuntu SSH 설정방법 및 ID/PW로 접속하기

안녕하세요. 바른호랑이입니다.이번 게시글에서는 Ubuntu Server 설치하고 SSH 접속을 허용한 후 ID/PW로 접속하는 방법에 대해서 알아볼 예정입니다.SSH(Secure SHell)는 네트워크 상의 다른 컴퓨터에 로

data-is-power.tistory.com

서버의 공개키와 개인키가 정상적으로 생성된 것과 최초 접속 후 클라이언트 PC에 서버의 공개키가 정상적으로 저장된 것을 확인했다면 클라이언트 측에서 공개키와 개인키 쌍을 생성한 후 공개키를 서버에 전송하여 서버의 '~/.ssh/authorized_keys'에 클라이언트의 공개키를 등록하는 것이 필요하며, 클라이언트에서 bash명령어인 'ssh-keygen -t rsa'를 실행하면 rsa타입의 공개키와 개인키가 클라이언트의 '~/.ssh/'경로에 자동으로 생성되게 됩니다.

git bash를 활용하여 ssh key pair 생성
생성 확인

생성 시 처음으로 나오는 질문의 경우 생성한 키 pair를 저장할 위치와 이름을 지정하는 것으로 필요에 따라 변경해 주면 되고, 이후 생성이 된 것을 정상적으로 확인했다면 bash 명령어 창에 'ssh-copy-id USER@remote-host' 명령어를 입력하여 클라이언트의 공개키를 해당 서버에 전송해 주면 됩니다. 

git bash를 활용하여 클라이언트의 공개키를 서버에 전송
저장된 클라이언트의 공개키 확인
서버에 저장된 클라이언트의 공개키 값 확인

 

서버에 전송된 클라이언트의 공개키가 정상적으로 전송되고 '~/.ssh/authorized_keys'파일에 저장된 것까지 확인했다면 생성한 key pair를 활용하여 접속이 되는지 확인합니다.

ssh {User}@{remote-server ip} -i {사용할 key가 위치한 경로}

key pair를 활용한 접속 테스트 확인

만약 사용하려는 key가 '~/.ssh/' 경로상에 저장되어 있다면 ssh 접속 시도 시에 default 경로로 '~/.ssh/'에 key가 있는지 확인한 후 자동으로 사용하기에 key가 존재할 경우에는 별도의 key 경로를 입력할 필요 없이 원격 서버에 접속할 수 있습니다. 다만, 여러 개의 key를 사용하거나 경로가 다른 경우에는 key 경로를 명확하게 입력해 주는 것이 필요합니다. 

key pair를 활용하여 접속이 되는 것까지 확인했다면 필요에 따라 ID/PW를 활용한 로그인 방식과 Key Authentication을 활용한 로그인 방식들을 모두 사용할 것인지, 어느 한 가지만 사용할 것인지 상황에 따라 맞게 설정하여 사용하면 되며, 인증방식의 허용여부는 서버의 '/etc/ssh/sshd_config' 파일에서 아래의 내용들을 필요에 맞게 수정해 주면 됩니다. 해당 파일을 수정할 경우 반드시 'sudo systemctl restart ssh' 명령어를 실행해 주어야 변경 사항이 적용됩니다.

- PasswordAuthentication: 해당 옵션을 yes로 하면 ID/PW 로그인 방식 사용 가능
- PubKeyAuthentication: 해당 옵션을 yes로 하면 Key Authentication 로그인 방식 사용가능

(아래 테스트는 클라이언트의 공개키를 클라이언트 상에서'~/.ssh/'경로가 아닌 다른 곳으로 옮기고, Key인증 방식만 사용가능하게끔 함)

서버에서 /etc/ssh/sshd_config 파일 수정
id/pw 방식 및 key authentication 방식으로 로그인 테스트

728x90
반응형

댓글