SSH KEY이용하여 Linux간 접속

워니·2024년 2월 27일

OS

목록 보기
3/3
post-thumbnail

일반적으로, SSH는 아이디와 비밀번호를 사용하여 인증되는데, 이는 사용자가 접속할 때마다 인증 정보를 입력해야 하는 번거로움이 있어요. 이러한 불편함을 해소하고 보안성을 강화하기 위해 SSH Key를 사용하여 접속하는 방법이 널리 사용되고 있습니다.
또한 GCP, AWS와 같은 클라우드 서비스에서도 SSH Key인증방식을 활용하여 SSH 프로토콜에 접속합니다.

오늘은 Linux간 ssh key를 이용한 연결방법에 대해 적어보겠습니다.

2대의 리눅스
Client | Server 로 나눠집니다.


💡 Client key 생성해주자.

ssh-keygen -t rsa
  • -t: 키 인증 알고리즘 종류( rsa, dsa 등 )

[user@client .ssh]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:*********** user@client
The key's randomart image is:
+---[RSA 2048]----+
|    . ...        |
|     o +.        |
|      +..   .    |
|     o.o * o .   |
|    o ..E * + o  |
|     o =.O @ . . |
|    . o O.+ O o  |
|     . =o+ . * . |
|      ..oo.   o..|
+----[SHA256]-----+

gen-key 명령어 수행하게 되면 .ssh 디렉토리 내부에 id_rsa, id_rsa.pub 2개의 키가 생성되게 되는데 id_rsa는 개인키(private key) id_rsa.pub는 공개키(public key)가 된다.

💡 public 키 Server에 전송해주자.

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

Number of key(s) added: 1

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

위에 단계를 거치면 Server /home/user/.ssh 경로에 authoriezd_keys 파일이 생성된걸 볼수있다.

-rw-------. 1 user user 398 Feb 27 01:20 authorized_keys

cat 명령어를 통해 authoriezd_keys 내용이 client 공개키와 같은 내용인지 확인해보자.

💡 key 기반 인증을 활성화해주자.

공개키를 server로 전송할 시점까지는 패스워드 기반 SSH 연결이 개방되어 있던 상태다.
이제부터는 패스워드 인증을 닫아주고 pubkey 인증을 열어주자.

/etc/ssh/sshd_config

아래의 3개의 내용을 적용해주자.

  • PubkeyAuthentication yes
  • AuthorizedKeysFile .ssh/authorized_keys
  • PasswordAuthentication no
systemctl start sshd(서비스시작)

systemctl status sshd(서비스 상태 확인)

since 시간을 확인해보자.

[user@server .ssh]# systemctl start sshd
[user@server .ssh]# systemctl status sshd
 sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2024-02-27 01:19:44 GMT; 46min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 27449 (sshd)
    Tasks: 1
   Memory: 3.1M
   CGroup: /system.slice/sshd.service
           ”€27449 /usr/sbin/sshd -D

Feb 27 02:05:30 server sshd[28662]: pam_unix(sshd:auth): authentication...t
...

💡접속 해보자.

마지막으로 client에서 server로 접속해보자.
-i 옵션으로 privatekey를 명시해줘주자.

ssh -i id_rsa user@{{serverHost}}
[user@{{clientHost}} .ssh]$ ssh -i id_rsa user@{{serverHost}}
Last login: Tue Feb 27 01:55:27 2024
[user@{{serverHost}} ~]$

💡ssh key 동작방식 간단하게 알아보자.

1. 인증 요청:

 클라이언트가 서버에 접속을 시도하면, 
 서버는 해당 클라이언트에게 서버의 공개키로 암호화된 랜덤한 도전 문자열(Challenge)을 보냅니다.

2. 서명 생성:

 클라이언트는 받은 랜덤한 도전 문자열을 자신의 개인 키로 서명을 생성합니다.

3. 서버 검증:

 클라이언트가 생성한 서명을 서버로 전송합니다.
 서버는 클라이언트의 공개 키를 사용하여 클라이언트가 전송한 서명을 복호화합니다.
 만약 복호화에 성공하면, 도전 문자열이 서명된 것이므로, 클라이언트는 해당 서버에 대한 신원이 확인된 것입니다.

4. 접속 허용:

 서버는 클라이언트의 신원을 확인하고, 
 인증이 성공하면 SSH 세션을 열어 클라이언트와 서버 간의 안전한 통신이 이루어집니다.
 
profile
Backend-Dev

0개의 댓글