Tools

SSH 사용하기

구티맨 2020. 7. 27. 18:59

서버 개발을 하다보면, 터미널에서 SSH 로 접속을 주로 하게 된다.

SSH는 Secure Shell 의 준말이고, 네트워크 상에 다른 컴퓨터에 접속, 명령을 실행할 수 있게 해주는 소프트웨어를 말한다.

SSH는 client, server 간에 연결을 안전하게 하기위해 암호화를 하여 처리한다.

암호화된 데이터를 주고 받을 때는, public / private key 를 사용하는데 public key 는 말 그대로 외부에 공개해도 되는 키이고

데이터를 암호화 하는데 사용한다. private key는 절대 공개되어서는 안되고 public key로 암호화된 데이터를 복호화 하는데 사용한다.

로컬 머신에( SSH client ) private key를 가지고, 리모트 머신( SSH server )에서는 public key를 가지게 된다.

로컬 머신에서 key를 생성하는 방법은 아래와 같다.

$ ssh-keygen -m PEM -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/goatee/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/goatee/.ssh/id_rsa.
Your public key has been saved in /Users/goatee/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3n4XLK7mfSSzfEn3mFANTveXRV84LzkvoW+SW71Bu3c goatee@C02XHD8VJG5J
The key's randomart image is:
+---[RSA 4096]----+
|               oo|
|              = =|
|             o B=|
|              B.=|
|        S    + *.|
|       . .  * B.+|
|        . .o @.Xo|
|         ...B.X E|
|         o+ooB oo|
+----[SHA256]-----+

$  ~ ls -alh ~/.ssh
total 32
drwx------    6 goatee  staff   192B  7 27 18:58 .
drwxr-xr-x+ 171 goatee  staff   5.3K  7 27 18:58 ..
-rw-r--r--@   1 goatee  staff   128B  7 11  2019 config
-rw-------    1 goatee  staff   3.2K  7 27 18:58 id_rsa
-rw-r--r--    1 goatee  staff   750B  7 27 18:58 id_rsa.pub
-rw-r--r--    1 goatee  staff   2.6K  6  3 19:02 known_hosts

ssh-keygen 을 사용하여 rsa 암호화방식으로 PEM 포맷으로 키를 생성한다.

MAC Catalina 버전에서 암호화 방식을 지정해주지 않으면 OPENSSH( ed25519 ) 으로 암호화 된다.

ssh-keygen 명령어 이후에는 prompt가 뜨는데 그냥 엔터만 눌러, 기본값을 사용하면 된다.

key가 생성 되고 나면, .ssh 폴더에 id_rsa / id_rsa.pub 라는 파일이 생긴다.

id_rsa 는 private key, id_rsa.pub는 public key 이다.

id_rsa 파일을 보면, 아래와 같은 포맷으로 되어있고, --- --- 사이에 암호화 방식이 적혀있다.

-----BEGIN RSA PRIVATE KEY-----
MIIJKgIBAAKCAgEA4cKNMAc2Bg+W17CVrCNC40vFcxFj/LoI46SVuz4F4i9D8B9/
BSqN8dodQ4A5730mu9ZvZAkBZUXRZWc4PSUcdXU1x8XmPeYh2AH9kBk6xya47OPE
bYt8cBspFqgGvoZyLfr3tDSP8AQ45X56MkcsmojLEwEq/vVBAB9HC6eqiUy9arB2
1QEpmIpuJbG+Wu7LeF8JFKorCoZlJfQCKUbSb3e2CSVSkMOL6JM689MqKaJJPg==
-----END RSA PRIVATE KEY-----

id_rsa 파일은 아래와 같은 형식이고, 첫줄은 암호화 방식 마지막 == 뒤에는 라벨이 적혀있다.
라벨은 말그대로 public key에 라벨링해서 어떤 key인지 적어둔것이라 생각하면 된다.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDhwo0wBzYGD5bXsJWsI0LjS8VzEWP8ugjjpJW7PgXiL0PwH38FKo3x2h1DgDnvfSa71m9kCQFlRdFlZzg9JRx1dTXHxeY95iHYAf2QGTp+lAOtkoTiFsYGpBw0Jw== goatee@C02XHD8VJG5J

 

이렇게 생성된 public key 를 접속할 서버에 등록 하고 나면, 로컬머신에서 ssh 로 접속을 시도하면 private key를 이용해 secure 연결이 만들어지고 안전하게 통신을 주고 받을 수 있게 된다.