Search
🔐

CLI 환경에서 OpenSSL RSA 키 세트 만들기

RSA는 두 개의 키 쌍, 공개키(Public Key)와 비밀키(Private Key)를 사용하는 암호화 방식입니다. 공개키는 누구나 알 수 있지만, 비밀키는 소유자만이 가지고 있어 데이터를 안전하게 보호할 수 있습니다. 공개키로 암호화된 데이터는 비밀키로만 복호화할 수 있어, 안전한 통신과 인증에 쓰입니다.
공개키 (.pub) : 암호화 또는 인증 검증에 사용하며, 서버의 authorized_keys 등에서 사용
비밀키 (.pem) : 데이터를 복호화하거나 서명하는 데 사용되고, 외부에 절대 노출되어선 안 됨
공개키는 자물쇠 역할, 비밀키는 그 자물쇠를 여는 열쇠 역할이라고 이해하면 됩니다. RSA는 인터넷 보안, SSH 접속 등 다양한 분야에서 널리 쓰이는 기본 암호 기술입니다.

작성 개요

윈도우즈 환경에서는 putty 설치 시 같이 설치되는 puttygen 프로그램으로 RSA 키 세트를 만들곤 합니다.
puttygen GUI의 경우 맥OS를 지원하지 않아, 아쉽게도 맥 사용자들은 터미널에서 openssl 명령어로 RSA 키세트를 만들 수 있습니당.
(하지만 오히려 명령어로 만드는게 훨씬 편해요)

기본 명령어

1.
비밀키 생성 (PEM)
# 비밀키 생성 (PEM 형식) openssl genpkey -algorithm RSA -out "my-key.pem" -pkeyopt rsa_keygen_bits:2048
Bash
복사
2.
공개키 생성 (PEM)
openssl rsa -pubout -in "my-key.pem" -out "my-key.pub.pem"
Bash
복사
3.
공개키 OpenSSH 형식으로 변환 (authorized_keys에 적합)
ssh-keygen -i -m PKCS8 -f "my-key.pub.pem" > "my-key.pub"
Bash
복사
4.
변환용 임시 PEM 공개키 삭제
rm -f "my-key.pub.pem"
Bash
복사

활용

키 생성이 잦은 사용자의 경우, 매번 명령어를 치기 귀찮기 때문에 bash, zsh 환경에서 간편하게 사용할 수 있도록 쉘 환경설정에 ( .bashrc or .zshrc ) 함수 형태로 등록하는게 좋습니다.
genrsa() { if [ -z "$1" ]; then echo "Usage: genrsa <keyfilename>" echo "Example: genrsa mykey" return 1 fi # 비밀키 생성 (PEM 형식) openssl genpkey -algorithm RSA -out "${1}.pem" -pkeyopt rsa_keygen_bits:2048 || return 1 # 공개키 생성 (PEM 형식) openssl rsa -pubout -in "${1}.pem" -out "${1}.pub.pem" || return 1 # 공개키를 OpenSSH 형식으로 변환 (authorized_keys에 적합) ssh-keygen -i -m PKCS8 -f "${1}.pub.pem" > "${1}.pub" || return 1 # 변환용 임시 PEM 공개키 삭제 rm -f "${1}.pub.pem" echo "Generated keys: ${1}.pem (private), ${1}.pub (public, OpenSSH format)" }
Bash
복사
1.
사용 방법
genrsa {파일명}
Bash
복사
genrsa my-key
Bash
복사
# 실행 결과 ....+....+...........+...+.+.........+..+....+.....+.+........+.+.....+.......+...............+........+....+..+......+...+++++++++++++++++++++++++++++++++++++++*....+.+...+......+.....+....+..+...+.......+..+..........+..+.+..............+......+....+.....+...+............+.+++++++++++++++++++++++++++++++++++++++*..+.....+..........+..+....+.....+......+...+...+....+...........+....+.....+......+.......+..+...+.+..+.......+...............+.....+.............+.........+.....+.+.....+..................+.......+...+.....+.......+..+............+...+.......+...+...+.....+...+....+...........+.......+........+.+.....+...................+..............+.+....................+.+...+...+............++++++ ...............+..+....+.....+.......+........+............+.......+...+.....+............+...+....+.....+...+...+...+.+++++++++++++++++++++++++++++++++++++++*..+....+...........+.......+...+..+++++++++++++++++++++++++++++++++++++++*............+.....+...+.............+...+.........+......+.....+.........+.+...........+...+...+....+...+......+.........+..+.+.....+..................+....+........+...+.......+........+.......+..+.......+...............+.....+.+..................+..+.........+.............+...+.........+........+......+......+....+..+...+............+.......+...+............+..+...+.+......+.....+...+...+...............+.......+...+.........+.........+......+......+.....+.........+.+........+....+...+..+...+.......+..+.........+.+...............+.....+.+...+............+..+...............+............+.............+..+......+....+...+..+......+....+.........++++++ writing RSA key Generated keys: my-key.pem (private), my-key.pub (public, OpenSSH format)
Bash
복사
2.
생성된 파일 확인
ll
Bash
복사
# 실행 결과 total 16 drwxr-xr-x@ 4 pjw staff 128 1113 14:12 . drwx------@ 3791 pjw staff 121312 1113 14:12 .. -rw-------@ 1 pjw staff 1704 1113 14:12 my-key.pem -rw-r--r--@ 1 pjw staff 381 1113 14:12 my-key.pub
Bash
복사
cat my-key.pub
Bash
복사
# 실행 결과 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrXrXVXCkhI8LcSlTPQI/SjmthWnsjkFfn6mf1ZgdDtvkd8AiLOBcAc8OMnBhzqv0BjknVg1YQ9tAuTxz5eAgvAhcQJrn7jr9E4X8UX3oLf9BjdvYWbPyzhoRT/sH7SYxL14Uw2HeeVg4QtGP98MBi/11NgTimdKAhbaEZHojz3paIOPI5VOyk9MiyIQVSNBEPAnVPaEtvHIynLu+Sm0bfYOkVjydfCupzcQRgwwb8rZeJcHGZ821fUav1vASdGFLbtd/G82d3YTwdvwJDJW54yVLpFjUG8eus8LcGD23smTnyWeV1UchGis/vxd3C1vd38qtKG1Bc/IJSl0U3TJgP
Bash
복사