[Linux][SSH] 암호없이 로그인하기

■ 개요

특정 솔루션의 요구사항이나 서버상에서 배포를 할때 암호없이 특정 서버에 로그인을 해서 작업을 해야 할때가 있습니다. 이때 서버와 서버사이에 암호없이 로그인을 하는 방법을 key based authentication이라고도 하며 서버끼리 암호없이 통신한다고 하여 trusted 통신이라고도 합니다. 

 

예제 서버 환경

모든 서버끼리 암호없이 로그인할 있도록 설정합니다.

예제 서버

hostname : IP

server_1 : 192.168.0.100

server_2 : 192.168.0.110

server_3 : 192.168.0.120

 

▶ Linux Hosts 등록된 내용

vi /etc/hosts

192.168.0.100 server_1

192.168.0.110 server_2

192.168.0.120 server_3

 

 

환경 설정

SSH 환경 파일 확인

먼저 SSH 데몬 환경 설정확인이 필요합니다. 서버의 sshd_config 파일에서 아래의 사항을 확인합니다.

주석처리가 되어 있을 경우 주석을 제거하고 ssh데몬을 재시작 한 후에 접속 테스트를 합니다.

shell> vi /etc/ssh/sshd_config
.....
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
.....

PubkeyAuthentication 파라미터가 no로 되어 있다면 이것을 yes로 변경하면 됩니다.

그리고 ssh데몬을 재시작 합니다.

/etc/init.d/ssh restart

ssh가 아니라 sshd일수도 있습니다. 확인되는 명령어로 재시작해주시면 됩니다.

 

키생성

먼저 서버 1에서 키를 생성합니다. 물어보는 질문에는 모두 엔터를 입력합니다.

[user1@server_1 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa): 
Created directory '/home/user1/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:F9ERZczoeEEG2UcewOSVf32+3CrMaTamf0CMvPp4WC8 user1@server_1
The key's randomart image is:
+---[RSA 2048]----+
|          oOBX*. |
|          .+*+=. |
|         ..=.o...|
|          +.=   =|
|        S .+   .o|
|         .o .   .|
|         + + o. o|
|        o.E @ .o.|
|        .ooB.+.. |
+----[SHA256]-----+

 

이렇게 하면 위에 나와있는것처럼 파일 2개가 생성이 됩니다.

Your identification has been saved in /home/user1/.ssh/id_rsa.

Your public key has been saved in /home/user1/.ssh/id_rsa.pub.

 

디렉토리를 확인해보면 다음과 같습니다.

[user1@server_1 ~]$ cd .ssh
[user1@server_1 ~]$ ls -al
total 20
drwx------. 2 user1 user1   80 Apr 11 23:45 .
dr-xr-x---. 9 user1 user1 4096 Apr 11 23:29 ..
-rw-------. 1 user1 user1 1679 Apr 11 23:29 id_rsa
-rw-r--r--. 1 user1 user1  394 Apr 11 23:29 id_rsa.pub

각각의 파일은 다음과 같습니다.

id_rsa : 개인키

id_rsa.pub : 공개키

 

로그인 대상 서버에 공개키 전송

ssh-copy-id 이용해서 로그인 대상 서버에 공개키를 전송합니다.

공개키를 로그인 대상 서버에 전송하면 대상 서버에서는 authorized_keys라는 파일이 만들어 지고 파일안에 공개키 안의 내용을 입력합니다.

 

+ 로그인 대상 서버에 공개키 전송(server_1 -> server_2)

[user1@server_1 ~]$ ssh-copy-id user1@server_2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user1/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user1@server_1's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'user1@server_1'"
and check to make sure that only the key(s) you wanted were added.

위에서 다음과 같은 암호 입력 요구 프롬프트가 나온다면 해당계정의 암호를 입력합니다.

user1@server_1's password:

 

만약 키를 복사할 없다는 에러 메세지가 나오거나 공개키의 이름이 다르다면 직접 공개키를 지정해 줍니다.

ssh-copy-id: ERROR: No identities found 

[user1@server_1 ~]$ ssh-copy-id -i id_rsa.pub user1@server_1

 

확인.

+ server_1 공개키 내용.

[user1@server_1 .ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqD3w15GD/rqgVIKDsJLllqE7opkNjDvF4h3Hk5uPw7dMNVpIAQMqLZvBueq1dbJJsp2radFH3IpMEKEixwZ7AFh3dIAmziEo6sR5X+NsjlGjX7CWCLOpaLAWvEInevvZSr7Uvx8DhinyejppjbJD/OTppOPBMRHiRv0Y/xRXvME85U1tC2Fx7nFQDLBRkV2Noq8a24Y//zOS4m8JhMgmffGXYUBDfxsyCMQ8Kj+60C/6oTnKRcQCuyZNJvGuJiJJ6APjKuCEayvOt3gqPeritxHhIQjwYxkjy2lDPgNv9QX+E9N87aN8UfKPvMk+E9ZB3hOm7nRZ13TxnneHAu9gx user1@server_1

 

+ 로그인 대상(server_2) 공개키 내용.

[user1@server_2.ssh]$ cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqD3w15GD/rqgVIKDsJLllqE7opkNjDvF4h3Hk5uPw7dMNVpIAQMqLZvBueq1dbJJsp2radFH3IpMEKEixwZ7AFh3dIAmziEo6sR5X+NsjlGjX7CWCLOpaLAWvEInevvZSr7Uvx8DhinyejppjbJD/OTppOPBMRHiRv0Y/xRXvME85U1tC2Fx7nFQDLBRkV2Noq8a24Y//zOS4m8JhMgmffGXYUBDfxsyCMQ8Kj+60C/6oTnKRcQCuyZNJvGuJiJJ6APjKuCEayvOt3gqPeritxHhIQjwYxkjy2lDPgNv9QX+E9N87aN8UfKPvMk+E9ZB3hOm7nRZ13TxnneHAu9gx user1@server_1

server_1 있던 공개키가 server_2 authorized_keys 같은 내용으로 등록되어 있는것을 확인할 있습니다.

 

 

 

로그인 시도

다음과 같이 server_1에서 server_2 로그인을 시도합니다. 보통은 암호를 요구하지만 암호를 요구하지 않고 바로 로그인이 됩니다.

[user1@server_1 ~]$ user1@server_2

혹은

[user1@server_1 ~]$ user1@192.168.0.100

 

다음과같이 로그인이 됩니다.

[user1@server_1 .ssh]$  ssh user1@server_2
Last login: Sat Apr 11 23:36:38 2020 from 10.30.224.2
[user1@server_2 ~]$

특별한 내용없이 로그인 로그 메세지만 나오고 server_2 바로 로그인이 되는것을 확인할 있습니다.

 

마찬가지로 server_1 공개키를 server_3에도 복사해 줍니다.

[user1@server_2 ~]$ ssh-copy-id user1@server_3

혹은

[user1@server_2 ~]$ ssh-copy-id user1@192.168.0.100

 

이렇게 하면 server_1에서는 server_2, server_3 암호없이 로그인을 있습니다.

만약 server_2에서 server_1, server_3 로그인을 하려면 server_2 공개키를 server_1, server_3 복사해 줍니다.

[user1@server_2 ~]$ ssh-copy-id user1@server_1

[user1@server_2 ~]$ ssh-copy-id user1@server_3

 

server_3에서 암호없이 server_1,server_2 암호없이 로그인하려면 마찬가지로 ssh-copy-id 이용해서 server_3 공개키를 server_1,server_2 복사해줍니다.

 

서버에서 서로 로그인 테스트

서버에서 대상 서버로 로그인을 테스트해 봅니다.

 

Designed by JB FACTORY