1. 공개키 암호화란?
공개 키 암호 방식은 암호 방식의 한 종류로 사전에 비밀 키를 나눠가지지 않은 사용자들이 안전하게 통신할 수 있도록 한다.
공개 키 암호 방식에서는 공개 키와 비밀 키가 존재하며, 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀 키는 키의 소유자만이 알 수 있어야 한다.
공개 키는 보안 타협 없이 공개적으로 배포가 가능하다.
공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호라고 부르기도 한다.
위키백과
공개키-개인키(비밀키)가 한 쌍으로 이루어져 있는 키 쌍이라 합니다.
공개키는 누구나 가질 수 있고, 개인키는 개인이나 중요한 사람만이 가지고 있습니다.
이런 특성을 이용하여 공개키 방식으로 암호화 및 인증에 사용됩니다.
메시지를 공개키로 암호화하면 개인키를 가지고 있는 사람만이 메시지를 복호화하여 메시지를 확인 할 수 있습니다. 개인키를 탈취당하지 않는 이상, 암호화된 메시지가 유출되어도 다른 사람이 절대 읽을 수 없습니다.
2. SSH 공개키 접속
SSH는 기본적으로 사전에 설정된 패스워드를 입력하여 접속하지만, 공개키 암호화에 사용되는 키 쌍을 가지고 접속할 수 있는 기능을 제공합니다.
사전에 자신의 공개키를 서버에 나눠주고, SSH 접속 시 개인키를 이용하여 사용자를 증명하는 원리로 로그인하게 됩니다.
아래는 ssh 접속 과정을 나타낸 시퀀스 다이어그램 입니다.
3. SSH 공개키 접속 방법
3.1 및 3.2는 공개키를 이용한 SSH 접속 방법을 설명하기 앞서 기본적으로 알아야할 사전지식입니다.
3.1 SSH 클라이언트 (사용자)
클라이언트 키 쌍
- ssh-keygen 명령어를 이용하여 공개키 및 개인키 생성
- 키 쌍을 생성하게 되면 기본적으로 아래 경로에 생성됨
- ~/.ssh/id_rsa (개인키)
- ~/.ssh/id_ras.pub (공개키)
- 서버의 authorized_keys 파일에 생성된 사용자 공개키를 제공해야 함
~/.ssh/known_hosts 파일
- 사용자가 처음 서버에 로그인 할 때, 연결을 진행하면 서버의 공개키가 해당 파일에 기록됨
3.2 SSH 서버 (호스트)
- 사용자가 처음 서버에 로그인 할 때, 연결을 진행하면 서버의 공개키가 해당 파일에 기록됨
서버 키 쌍
- 서버에서 openssh-server를 설치하는 과정에 자동 생성
- /etc/ssh/ssh_host_ras_key (개인키)
- /etc/ssh/ssh_host_ras_key.pub (공개키)
- 클라이언트가 서버에 처음 연결 시도 시 해당 공개키를 클라이언트에게 제공. 클라이언트는 known_hosts 파일에 서버의 공개키를 저장
- 서버에서 openssh-server를 설치하는 과정에 자동 생성
~/.ssh/authorized_keys 파일
- 해당 파일에 로그인할 클라이언트의 공개키가 기록되어있어야 함
3.3 SSH 공개키 접속
3.3.1 클라이언트 키 쌍 생성
- 아래 명령어를 이용하여 RSA 알고리즘 키 쌍 생성
- $ ssh-keygen -t rsa
- 별 다른 설정이 필요하지 않으므로, 엔터를 계속 누르면 현재 로그인되어있는 사용자의 홈디렉토리 .ssh 폴더 밑에 키 쌍이 생성 됨
3.3.2 공개키 전송
리눅스계열에서는 공개키를 복사하는 명령어 ssh-copy-id 를 사용
- $ ssh-copy-id USER@remote-host
- 예) $ ssh-copy-id lee@192.168.0.15
- -i 옵션을 사용하지 않으면, 현재 로그인 되어있는 계정의 .ssh/id_rsa.pub 파일을 전송 (기본값)
- 공개키 파일이 다른 경로에 있다면 -i 옵션을 이용하여 별도의 경로를 지정해야 함
- $ ssh-copy-id -i /home/test/key/key.pub lee@192.168.0.15
윈도우에서는 ssh와 cat을 이용한 명령어 조합을 이용
- type $env:공개키경로 | ssh USER@remote-host "cat >> .ssh/authorized_keys"
- 예) type $env:C:\Users\LDB.ssh\id_rsa.pub | ssh lee@192.168.0.15 "cat >> .ssh/authorized_keys"
3.3.3 로그인
공개키 방식으로 SSH 접속 시 -i 옵션 생략 시, 아래 경로에 있는 개인키로 접속을 시도
- 윈도우: USER_NAME\.ssh\id_rsa
- 리눅스: USER_NAME/.ssh/id_rsa
만약 개인키의 위치가 다르거나 AWS의 pem 파일인 경우 -i 옵션 이용
- $ssh -i KEY_PATH\key.pem USER@remote-host
- $ssh -i KEY_PATH\id_rsa USER@remote-host
3.3.4 키 파일 권한 문제 (Permissions are too open)
개인키를 windows <-> linux간 FTP로 복사하다가 발생하는 권한 문제입니다.
ssh에 사용되는 각 종 파일들 (설정파일,공개키,개인키 등)은 보안적인 이슈로 인해 아래 사진과 같이 권한이 정해져있습니다.
위 사진을 보면 Mandatory Permission 이라고 정해진 권한이 있는데, 개인키 파일과 설정파일은 꼭 600으로 설정이 되어있어야 한다는 뜻입니다. (600은 소유자만 읽고 쓸 수 있는 권한)
만약 600이 아니라면 chmod 명령어를 통해 권한을 수정하면 됩니다.
만약 윈도우에서 발생했다면 해당 파일에 대한 상속 권한을 비활성화 시키고, 현재 윈도우 계정만 개인키 파일에 접근할 수 있도록 설정을 변경해줍니다.
자세한 방법은 윈도우10 SSH 접속시 PEM 파일 퍼미션 에러 해결방법 글을 참고하시면 됩니다.
[참고]
'Server' 카테고리의 다른 글
REST, RESTful, REST API에 대한 오해와 진실 (0) | 2021.10.05 |
---|---|
GitLab CI/CD + SSH 공개키를 이용한 자동배포 (1) | 2021.09.14 |
댓글