일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- WEB #HTTP #HTTPS #SSL #통신개념
- Vuejs#JavaScript#프레임워크#개요#개념
- 이펙티스자바
- abstract
- React #생명주기
- 모니터링 #k8s #prometheus #metricbeat #elasticsearch #logstash
- X.25
- ssl #개인키 #공개키
- Mysql #RDBMS #설치 #기동 #설정
- 클라우드#클라우드서비스#클라우드개념#IaaS#Paas#Saas
- MySQL 5.7 #MySQL 8.0 #차이점 #업그레이드
- ssh #pem
- React
- MQ#MOM#메시지지향미들웨어#Kafka#ActiveMQ#rabbitMQ
- Oracle #ANSI #SQL #JOIN
- memory #리눅스 #자원관리
- interface
- 오라클#튜닝
- EKS란
- SSH #공개키인증
- k8s
- non-locking
- JDK1.8
- docker #k8s #배포하기
- React#기초#JS#JavaScrip#개념
- JPA #생명주기
- MQM #웹서버
- REST#SOAP#API
- cors #Authorization
- Today
- Total
개발노트
SSH 공개키 인증 과정 본문
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 파일 퍼미션 에러 해결방법 글을 참고하시면 됩니다.
[참고]
1. https://serverfault.com/questions/935666/ssh-authentication-sequence-and-key-files-explain
2. https://superuser.com/questions/215504/permissions-on-private-key-in-ssh-folder
'인프라' 카테고리의 다른 글
NAT란? (0) | 2022.08.12 |
---|---|
리눅스 top 명령어 시 free, swap 메모리의 이해 (0) | 2022.08.03 |
Ubuntu OS에 HAproxy 설치 및 기초 설정 가이드 (0) | 2022.02.21 |
[인프라] SSL, CRS 인증 관련 정리(대칭키, 공개키, 개인키) (0) | 2021.12.22 |
PemKey를 이용한 SSH 접속 (0) | 2021.12.22 |