IT/Linux

[Linux] SSH Key 등록을 통해 Server에 Password 없이 접속하기.

고슴도치 엔지니어 2022. 2. 17. 23:08

Host A(Client)에서 Host B(Server)로 접속 할때 Host A가 신뢰할 수 있는 Client 라면 Password 없이 접속할 수 있게 Key 를 등록해두는 편이 여러모로 편리합니다. 

 

이 글은 그 방법에 대해서 서술 합니다.

 

크게 위 3개의 과정을 거치면 된다.

 

Client 에서 SSH 접속을 위한 Key를 생성하게되면 Public Key와 Private Key 두 가지가 생성됩니다. 이 중 Private Key는 Client가 가지고 있고, Public Key만 접속하고자 하는 서버에 등록해주게 됩니다.

 

SSH Key를 생성하기 위해서는 ssh-keygen 명령어를 사용하게 됩니다.

 

1. Client에서 Key 생성하기

$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): 
/home/ubuntu/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ubuntu/.ssh/id_rsa
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Hashvalue ubuntu@ip-
The key's randomart image is:
+---[RSA 3072]----+
|       .oooo..=oO|
|       ..o  .o *.|
|    . . . o  .o..|
|   . = . +  . .o.|
|    . + S..  . o.|
|         ooo+ o +|
|         ++=.. E |
|        o ++.   +|
|         +=o.  .o|
+----[SHA256]-----+

ssh-keygen -t rsa 명령어를 통해 rsa 방식으로 Public, Private key 쌍을 생성하게 됩니다.

이후 키를 생성할 경로, Passphrase 등을 물어보게 되는데 저는 전부 기본값으로 두고 enter로 진행하였습니다.

생성된 key의 default 경로는 홈디렉토리/.ssh 이며, id_rsa와 id_rsa.pub 이라는 이름으로 생성됩니다.

 

 

2. 생성된 Public Key를 접속하고자 하는 Server에 등록하기.

scp를 통해 생성된 /home/ubuntu/.ssh 아래에 생성된 id_rsa.pub key를 접속하고자 하는 Server에 전송해줍니다.

$ scp 전송할파일 대상User@대상IP:대상경로
아래는 예시
$ scp /home/ubuntu/.ssh/id_rsa.pub server1@10.10.1.1:/home/server1/

물론 이렇게 scp 명령어로 파일을 전송하지않고 아래처럼 cat 명령어를 통해 나오는 key 내용을 복사해두고 나중에 Server에 붙여넣는 방법도 가능합니다.

$ cd /home/ubuntu/.ssh
$ cat id_rsa.pub
ssh-rsa AAadafsdfasdQqjXQa0BUT9C2BfziTjTJBcczmBMuVasdfasdfsdafY
pAEQ9tA3pWa8EOTELsgoasfRATAkx5erzjGTnTyZZURhtAZxHnjao8QAV0p
/ytHtKAXlmXEk1fvTq6asdfadsfasdfasdfasdfasdfasdfasdfohPruP0UgLb
3cx+yVdaEI5/wTtUpgasdfasdfasdfasdfasdfasdfel6X83dqdOKYqsBgEc6J
bV9h5jlKpasdfasdf38JNER ubuntu@ip-10-10-1-1

위 두가지 방법 중 어느 한가지 방법을 택했으면 이제 Key를 등록해주고 싶은 Server에 접속

마찬가지로 ~/.ssh 디렉토리에 authorized_keys 라는 파일이 있다면 해당 파일에 복사한 내용을 붙여넣기 해주면 됩니다.

없다면 vi 에디터를 통해 파일을 생성해주고 복사한 내용을 붙여넣기 해 주면 됩니다.

Server에서

$ cd /home/server1/.ssh
$ ls
authorized_keys
$ vi authorized_keys

복사한 내용 붙여넣기.

 

3. Client에서 Server로 SSH를 통해 접속해보기.

$ ssh server1@10.10.1.1

더 이상 비밀번호를 물어보지 않고 접속된다면 성공 한 것입니다.

 

 

4. 추가 팁

계속해서 Permission 문제를 겪었었는데 이유는 아래와 같았습니다.

1) .ssh 디렉토리의 소유자는 접속하고자 하는 클라이언트쪽이던 서버쪽이던 해당 유저가 소유해야 합니다.

가끔 .ssh 디렉토리가 홈디렉토리에 없어서 수동으로 생성하는 경우가 있는데 이때 sudo mkdir 명령을 통해 디렉토리를

생성하게 되면 디렉토리의 소유자가 root가 되면서 .ssh 디렉토리에 있는 key를 정상적으로 참조 할 수 없게 됩니다.

 

2) .ssh 디렉토리의 권한은 항상 700 이어야 합니다.

chmod 명령어를 통해 수정 할 수 있습니다.

 

3) authorized_keys 파일의 권한은 항상 600 이어야 합니다.

chmod 명령어를 통해 수정 할 수 있습니다.