안녕하세요. 바른호랑이입니다.
이번 게시글에서는 컴퓨터들 간의 통신에 주로 사용되는 프로토콜인 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/' 경로에 저장된 개인키를 활용하여 접속하면 됩니다. 이를 그림으로 도식화하면 아래의 그림과 같습니다.
서버의 공개키와 개인키의 경우는 '/etc/ssh/' 경로상에 아래와 같은 파일형태로 저장되며, '.pub' 붙은 파일은 공개키로, 붙지 않은 파일은 개인키로 보면 됩니다. 서버의 공개키의 경우 클라이언트가 처음 연결 시도 시 아래와 문구를 묻게 되는데 이를 'yes'라 동의하면 클라이언트의 '~/.ssh/known_hosts' 파일에 저장되게 됩니다.
최초 로그인 시에는 ID/PW를 이용하여 접속을 하게 되며, ID/PW를 활용한 로그인 방식은 아래의 게시글을 참고하면 됩니다.
※ Ubuntu SSH 설정방법 및 ID/PW로 접속하기
서버의 공개키와 개인키가 정상적으로 생성된 것과 최초 접속 후 클라이언트 PC에 서버의 공개키가 정상적으로 저장된 것을 확인했다면 클라이언트 측에서 공개키와 개인키 쌍을 생성한 후 공개키를 서버에 전송하여 서버의 '~/.ssh/authorized_keys'에 클라이언트의 공개키를 등록하는 것이 필요하며, 클라이언트에서 bash명령어인 'ssh-keygen -t rsa'를 실행하면 rsa타입의 공개키와 개인키가 클라이언트의 '~/.ssh/'경로에 자동으로 생성되게 됩니다.
생성 시 처음으로 나오는 질문의 경우 생성한 키 pair를 저장할 위치와 이름을 지정하는 것으로 필요에 따라 변경해 주면 되고, 이후 생성이 된 것을 정상적으로 확인했다면 bash 명령어 창에 'ssh-copy-id USER@remote-host' 명령어를 입력하여 클라이언트의 공개키를 해당 서버에 전송해 주면 됩니다.
서버에 전송된 클라이언트의 공개키가 정상적으로 전송되고 '~/.ssh/authorized_keys'파일에 저장된 것까지 확인했다면 생성한 key pair를 활용하여 접속이 되는지 확인합니다.
ssh {User}@{remote-server ip} -i {사용할 key가 위치한 경로}
만약 사용하려는 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인증 방식만 사용가능하게끔 함)
'IT & 데이터 사이언스 > 환경설정 및 기타사항들' 카테고리의 다른 글
[환경설정] Ubuntu에 Docker 설치하기 (1) | 2024.07.24 |
---|---|
[환경설정] Azure에서 Custom Domain 등록하기 (0) | 2024.07.01 |
[환경설정] Ubuntu SSH 설정방법 및 ID/PW로 접속하기 (2) | 2024.06.28 |
[환경설정] VSCode Remote SSH 사용법 (0) | 2024.06.27 |
[환경설정] Azure VM(Windows) 생성 및 연결 방법 (0) | 2024.06.25 |
댓글