운영체제별 SSH Key Pair 준비
Oracle Cloud Infrastructure(OCI)의 VM 인스턴스가 지원하는 접속 프로토콜은 SSH입니다. OCI VM 인스턴스 SSH 서버의 기본 사용자 인증 방식은 Key Pair입니다. 따라서 OCI VM 인스턴스를 생성때 SSH 공개키를 등록해야 합니다. 이 문서에서는 SSH 접속에 사용할 Key Pair(SSH-2 RSA 타입)를 만드는 방법을 정리합니다.
이번 문서는 다음과 같은 목차로 구성됩니다.
Key Pair란?
SSH Key는 개인키(private key)와 공개키(public key)로 구성됩니다. 두 개의 ssh key를 합쳐서 SSH Key Pair라고 부릅니다.
오라클이 제공하는 VM 이미지는 다음과 같은 암호화 알고리즘 유형을 지원합니다.
- RSA
- DSA
- DSS
- ECDSA
- Ed25519
OCI VM 인스턴스를 만들기 전에 앞에서 열거한 암호화 알고리즘을 사용하여 SSH key Pair를 준비해야 합니다. 사용자가 정의한 Custom VM 이미지에서는 지원하는 SSH key 유형이 다를 수 있습니다. 이 경우에 해당 Custom 이미지가 지원하는 ssh key 타입에 확인하고 작업해야 합니다. OCI가 제공하는 VM 이미지에 사용할 ssh Key Pair를 RSA, DSS, DSA와 같은 암호화 알고리즘으로 만든다면, 최소 2048 비트를 사용을 권장합니다. 반면 ECDSA 암호화 알고리즘으로 ssh Key Pair를 만든다면, 최소 256 비트 사용을 권장합니다.
SSH 키 생성
각 운영체제(Linux, OSX, Window)별로 SSH 키를 생성 생성하는 방법은 다음과 같습니다.
운영체제 | SSH 키 생성 툴 |
---|---|
Linus | ssh-keygen |
OS X | ssh-keygen |
Windows 10 이상 | ssh-keygen |
Windows 10 아래 버전 | puttygen |
리눅스, 맥 OS(OS X), Window 10을 사용할 경우에 ssh-keygen 사용하여 ssh key를 생성합니다. ssh-keygen이 설치되어 있지 않다면, 각 운영체제에 맞는 OpenSSH(http://www.openssh.com/portable.html)를 설치합니다. Windows 10 아래 버전에서는 PuTTY를 설치하고 PuTTY의 구성 컴포넌트인 PuTTY Key Generator(puttygen)을 사용하여 ssh key를 생성합니다.
ssh-keygen을 이용한 ssh key 생성
리눅스, Mac OS 및 Window 10에서는 ssh-keygen을 이용하여 ssh key pair를 생성합니다. 이때 아래와 같은 형식의 옵션으로 ssh-keygen 명령을 실행합니다.
ssh-keygen -t rsa -N "" -b 2048 -C "comment" -f <path/KeyFileName>
위와 같은 형식의 명령에서 각 옵션은 다음과 같은 의미를 갖습니다.
옵션 | 설명 | 예제 입력 | 비고 |
---|---|---|---|
-t | 생성 key 유형 지정 | -t rsa | 기본값이 rsa, 생략 가능 |
-b | 암호화 비트수 | -b 2048 | 최소 2048을 권장 |
-C | 커맨트 입력 | -C “ssh key for demo” | 인증서 구분을 위해서 사용자 email을 주로 사용 |
-N | new_passphrase 입력 | -N “” | 공백 문자열 입력 |
-f | 출력 파일명, 위치 포함 | -f ./id_rsa |
ssh key를 생성하는 명령을 앞에서 설정한 입력 값으로 다음과 같이 실행할 수 있습니다.
> ssh-keygen -t rsa -N "" -b 2048 -C "ssh key for demo" -f ./id_rsa
Generating public/private rsa key pair.
Your identification has been saved in ./id_rsa.
Your public key has been saved in ./id_rsa.pub.
The key fingerprint is:
SHA256:SFo9Bzyr8dzoANqGZZ9oxwdZIBo+TCsJ9b8Ed5I8OlY ssh key for demo
The key's randomart image is:
+---[RSA 2048]----+
|..+ . .o. |
|.= = o o+. |
|o * o Eo+o. |
| . .+X+=.o |
| *==+BSo |
| o.=oB.= . |
| o ..+ |
| . |
| |
+----[SHA256]-----+
>
앞에서 f
옵션으로 지정한 위치에 다음과 같은 파일이 생성된 것을 확인할 수 있습니다.
> ls -al id_rsa*
-rw------- 1 taewan staff 1823 1 17 15:25 id_rsa
-rw-r--r-- 1 taewan staff 398 1 17 15:25 id_rsa.pub
>
window 10 아래 버전에서 ssh key 생성
window 10 아래에서는 putty에 포함된 puttygen을 이용하여 SSH 키를 생성할 수 있습니다.
Windows 10 아래 버전에서 git을 설치하면, git과 함께 설치되는 MINGW32가 제공하는 ssh-keygen이 설치됩니다. ssh-keygen을 이용하여 SSH key pair를 생성할 수 있습니다. ssh-keygen은 git-bash에서 실행되어야 합니다.
putty를 내려받아 설치하면 puttygen도 함께 설치됩니다. puttygen을 실행하면 <그림 1>과 같은 모습으로 실행됩니다. <그림 1>과 같이 puttygen에서 키 타입으로 RSA와 키 생성의 비트 수를 2048로 설정한 후 “Generate” 버튼을 클릭합니다.
- 그림 1. puttygen(Putty Key Generator) 모습
PuttyGen은 키를 생성할 때 마우스 위치 값을 키 생성 초깃값으로 활용합니다. 따라서 키를 생성이 완료할 때까지 <그림 2>의 빨간색 영역에서 마우스를 움직여야 합니다.
- 그림 2. RSA 키 생성 진행 중
RSA 키 생성이 완료되면 <그림 3>과 같이 UI가 변경됩니다. 이제 <그림 3>과 같이 Save Private Key
버튼을 클릭해서 개인키(Private Key)를 저장합니다. 프롬프트가 뜨면 passphrase 없이 키가 저장되도록 Yes 선택 후 저장합니다.
- 그림 3. 개인 키 저장
<그림 4>와 같이 개인 키를 저장합니다. 여기에서 저장된 개인키(Private Key)는 PuTTY Private Key(PPK) 형식으로 저장되며, 이 PPK 파일은 PuTTY에서만 사용 가능합니다.
- 그림 4. 개인 키 저장
Putty Key Generator는 공개키를 저장할 때, OpenSSH 형식이 아닌 자체 형식으로 저장합니다. 따라서 Putty Key Generator가 제공하는 공개키 저장 기능을 사용하지 않습니다. <그림 5>에서 공개키 문자열을 모두 복사하여 별도의 파일에 붙여넣고 저장합니다. 새로 만든 파일은 앞에서 만든 개인키와 같은 폴더에 저장합니다. 파일명은 개인키 파일명과 동일하게 하고 확장자는 pub로 설정합니다.
- 그림 5. 공개 키 저장
PPK 형식 개인키를 PEM 형식으로 변환
Putty Key Generator는 개인키를 PPK 형식으로 저장합니다. 이 개인키를 Putty가 아닌 일반 SSH의 개인키로 사용할 수 없습니다. PPK 형식의 개인키를 PEM 형식으로 변환하는 기능을 Putty Key Generator에서 제공합니다. Putty Key Generator의 메뉴에서 Conversions을 선택하고 Export OpenSSH Key를 선택합니다. 프롬프트가 뜨면 passphrase 없이 키 저장하기 위해서 Yes 선택 후 파일을 저장합니다.
참고 문서
- http://taewan.kim/post/ssh_key/
- https://www.onmsft.com/how-to/how-to-generate-an-ssh-key-in-windows-10
- https://www.youtube.com/watch?v=Y0e1mMl0D1g
- Generate SSH Key Pairs to Access Linux instances in the Oracle Cloud Infrastructure