Server Operation

로컬환경에서 원격서버로 비밀번호 없이 RSA로 SSH 접속하기

iKay 2019. 7. 15. 00:38
반응형

보통 로컬환경에서 원격서버에 접속할 때, id, password를 통해 SSH 접속하는 경우가 흔하지만, 이 경우는 비대칭키 암호 방식을 이용한 RSA로 접속하는 경우보다 위험하고 더 편리하기 때문에 id, password로 원격서버에 접속하는 것은 지양하는 것이 좋다. 

 

참고로, RSA로 인증하는 방식은 비대칭키 암호 방식 중 한 가지이고, 비대칭키 암호 방식으로서 현재 가장 널리 쓰이는 듯 하다. 비대칭키 암호 방식이란, 공개키(public key), 비밀키(secret key)가 한 쌍이 되어 암호화-복호화하는 방식으로, 비밀키만 노출되지 않는다면, 데이터를 교환할 때 비교적 안전한 방법이다. 

 

정리한 예제의 로컬환경은 맥북, 원격서버는 Ubuntu 18.04이다. 

 

1. 로컬 환경에서 RSA public key, private key를 생성

 

아래와 같이, 명령어를 입력하면 ~/.ssh 경로에 id_rsa 라는 private key와 id_rsa.pub 라는 public key가 생성된다. 

$ ssh-keygen -t rsa -b 4096 -C "my-ssh-key"                 
// -t: 암호화 방식, -b: bits, -C: comment(구분하기 위한 주석)
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/kay/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): // 그냥 엔터
Enter same passphrase again: // 그냥 엔터
Your identification has been saved in /Users/kay/.ssh/id_rsa.
Your public key has been saved in /Users/kay/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:id3YiVPeKJIefsI3c8Gh8D54z5AX8aNmT7htF4cOla8 my-ssh-key
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|                 |
|      .   +    . |
|       * @ B  o  |
|      = S X +. o |
|     + = + =..o o|
|      * @ B .o + |
|       = % =. E  |
|          +.o.   |
+----[SHA256]-----+
 

 

2. 원격 서버에 public key를 전송

 

아래와 같이 명령어를 입력하면 원격 서버에서 user의 home 디렉토리에 id_rsa_pub 라는 공개키가 복사된다. 

$ scp $HOME/.ssh/id_rsa.pub {user}@{server_address}:id_rsa.pub

 

3. public key를 authorized_keys 파일에 추가

vim과 같은 편집기로 copy-paste 해도 되지만 '>>' 를 사용하면 파일 아래에 간단히게 덧붙일 수 있다. 

$cat $HOME/id_rsa.pub >> $HOME/.ssh/authorized_keys

 

4. 원격서버에서 sshd_config 수정

$ sudo vi /etc/ssh/sshd_config

/*

/etc/ssh/sshd_config 에서 PubkeyAuthentication, 
PasswordAuthentication, ChallengeResponseAuthentication
를 찾아서 아래와 같이 설정해준다.

... 

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no

...

*/

 

5. sshd 재시작

 

원격 서버 sshd를 재시작해 변경된 사항을 적용시킨다. 

$ sudo systemctl restart ssh

 

6. 마무리

 

로컬 환경에서 원격 서버로 ssh 접속을 해보자. 

 

성공한다면, 

$ ssh {server_address}
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-54-generic x86_64)
...

이런식으로 id, password를 묻지 않고 ssh 접속이 될 것이다. 

 

실패한다면, 

$ ssh {server_address}
Permission denied (publickey).

이런식으로 출력 될 것이다. 만약 이런 메시지가 출력된다면 위 과정을 차근차근 다시 살펴 봐야 겠다.

 

반응형