SSH 키 생성을 위해 사용하는 ssh-keygen 명령은 비밀키를 먼저 만들고 그 값과 passphase를 활용해 공개키를 만든다.
따라서 같은 페어가 아닌 키들은 동시에 사용될 수 없다.
ssh-keygen은 SSH의 대표적 구현체인 OpenSSH 라이브러리에 포함되어 있다.
만들어진 키 페어는 시스템 자동 로그인, SSO(Single Sign-On) 또는 서버 호스트 사설 인증 등에 사용할 수 있다.
ssh-keygen이 어떤 알고리즘과 방식으로 한쌍의 키를 만드는지 보자
% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/brandon/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/brandon/.ssh/id_rsa.
Your public key has been saved in /Users/brandon/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hjbXN0Bbx6t+RWKf/u6fFrupg3gyk3BsXKqKLfHAV1g brandon@mac1
The key's randomart image is:
+---[RSA 2048]----+
| . ... |
| E . o .. |
| o o . |
| . o . o + .|
| . = S + oo +.|
| + o = * ... oo|
| = = o.. ..o|
| .o. . * o...+o|
| ..o. = o+*O|
+----[SHA256]-----+
① ssh-keygen 명령을 별도의 매개 변수 없이 실행한다.
② 비밀키가 저장될 위치를 묻는다. 별도의 파일 위치 없이 Enter를 하면 기본값은 사용자의 /.ssh/id_rsa에 생성된다.
별도의 알고리즘 지정이 없으므로 RSA 알고리즘을 사용하겠다는 의미도 포함되어 있다.
(SSH는 RSA 외에도 DSA, ECDSA, ED25519 등의 알고리즘을 지원한다.)
키 생성 시의 알고리즘은 -t(type) 옵션을 사용하여 알고리즘과 키의 크기(bit)를 지정할 수 있다.
ssh-keygen -t rsa -b 4096
ssh-keygen -t dsa
ssh-keygen -t ecdsa -b 521
ssh-keygen -t ed25519
③ passphrase를 묻는다.
여기에 입력한 값은 개인키를 암호화하는데 사용된다. 아무것도 입력하지 않으면 개인키를 암호화하지 않으며 자동 로그인에서는 아무것도 입력하지 않아야 한다. (개인키를 암호화하지 않으면 보안문제가 발생할 수 있다. 개인키 파일을 가지고 있는 사람이라면 누구든 바로 접속이 가능하기 때문이다.)
passphrase는 키를 암호화할 때 salt처럼 사용하는 값이다.
비밀키가 노출되는 만약의 사태를 대비하려면 충실한 passphrase를 사용하는 것이 암호화 강도를 높일 수 있는 방법이다.
④ /.ssh/id_rsa.pub 파일도 생성된다.
이 파일은 공개키(public key)다.
비밀키(id_rsa)가 먼저 만들어지고 passphrase를 조합하여 public 키가 만들어졌다.
따라서 공개키와 비밀키는 한 쌍(pair)으로 만들어졌고 같이 작동한다는 것이 이제 이해될 것이다.
id_rsa | private key, 절대로 타인에게 노출되면 안된다. |
id_rsa.pub | public key, 접속하려는 리모트 머신의 authorized_keys에 입력한다. |
authorized_keys | 리모트 머신의 .ssh 디렉토리 아래에 위치하면서 id_rsa.pub 키의 값을 저장한다. |
.ssh 디렉토리는 매우 중요한 보안 정보가 담긴 디렉토리다.
특히 id_rsa 파일은 개인키 파일로 다른 유저에게 노출되어서는 안되는 파일이다.
비밀번호가 노출되는 것과 같은 효과이므로 퍼미션 관리를 확실하게 해줘야한다.
일반적으로 .ssh 디렉터리는 700, id_rsa 파일은 600, id_rsa.pub 파일과 기타 공개되어도 되는 파일들은 644로 설정해놓는다.
아래의 명령을 순차적으로 실행한다.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
⑤ Key Fingerprint 정보는 아래의 조합이다.
SHA256:hjbXN0Bbx6t+RWKf/u6fFrupg3gyk3BsXKqKLfHAV1g brandon@mac1
SHA256 → Base64 인코딩 된 SHA256 해시 알고리즘을 사용하는 것을 의미한다.
hjbXN0Bbx6t+RWKf/u6fFrupg3gyk3BsXKqKLfHAV1g → 키의 Fingerprint 정보
brandon@mac1 → 키의 위치
⑥ randomart 이미지 → Fingerprint의 시각화(visualize)
~/.ssh 폴더를 보면, 비밀키와 공개키가 생성되어 있음을 확인할 수 있다.
% ls -al ~/.ssh
total 40
drwx------ 7 brandon 600 224 Dec 14 10:32 .
drwxr-xr-x+ 92 brandon 600 2944 Dec 10 12:36 ..
-rw-r--r-- 1 root 600 157 Jul 11 2018 config
-rw------- 1 brandon 600 1823 Dec 14 10:32 id_rsa
-rw-r--r-- 1 brandon 600 398 Dec 14 10:32 id_rsa.pub
-rw-r--r-- 1 brandon 600 558 Nov 12 11:53 known_hosts
-rw-r--r-- 1 brandon 600 352 Nov 20 2018 out
이제 두 개의 키의 내용을 각각 확인해보자
% cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA9MC5YSbfk0iY5ZJQzJoK2E3bhV30i8D2TJMsgIuRd68gm0pRrbEs
H6QWcsN/IyRVgRQr0QJFzoEG6kNjQM4e+PWr413cYruQIqO+t+rMRJziAxB8m088Qu2Ezm
eb5xZBNLFQzESlWufEi3ACWXSbO7ld/WfkstuAA/WjTj8ImmNsw9lKMsEhnuF2Hl6mnCaa
..........
TWks9MqwpAvstduxUeXw5N+lQZyHTiNXzxigqJuv0AFcZd3SUAAACBAPgV/E3K7fBwxeOT
qAXmwgjjWdUFR0iipl3A9i2PFBsfyrQRKUeXEAbkVBpUZZMQlSH/Gk+9RqAOzKftG5ULOt
EnNDkgSq0isD1IX02Neb/w+6aD6vHY4RVPCs8Iw/6AHn4RrIoqEGHewUbE7HbQOEkY+Y8A
IabwMHcOjPG0CPTrAAAAEHNha2FuZ0BzZWwtbXBuYWIBAg==
-----END OPENSSH PRIVATE KEY-----
% cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0wLlhJt+....+qCjPc1B8GUT3 brandon@mac1
이제 공개키, 비밀키 한 쌍이 생성되었고 사용할 수 있는 준비가 되었다.
참고
'Study > Study' 카테고리의 다른 글
가상 머신 구축 및 실습을 통해 SSH 인증키 생성 방식 이해하기 - 2 (0) | 2022.04.13 |
---|---|
가상 머신 구축 및 실습을 통해 SSH 인증키 생성 방식 이해하기 - 1 (0) | 2022.04.13 |
cloud-init 이란 ? (0) | 2022.04.06 |
JumpHost (특정 서버를 경유해 SSH 사용하기) (0) | 2022.04.05 |
Prometheus란 ? (0) | 2022.03.23 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!