리눅스/OS 설정

[Linux] ssh-keygen 생성으로 ssh 접속하기

ㅎㄷㄹㅁㅇ 2021. 1. 20. 17:11
반응형

ssh-keygen

목차

    ssh-keygen 이란?

     

    SSH를 통한 서버 접속 시 다양한 인증 방법으로 접속이 가능한데, 제일 편리하고 간단하게 사용하는 방법은 패스워드를 통한 접속을 하는 것입니다. 하지만 보안에 취약하고 주기적 변경해야 하는 단점이 있습니다. 

    폐쇄망을 사용하지 않는 경우는 더더욱 취약하게 됩니다. 

     

    ssh-keygen은 SSH 접속을 위한 인증 키를 생성, 관리 및 변환합니다.  Key 생성 시 Public key와 Private Key가 생성되는데 이는 한 쌍으로 동작합니다. Private key와 Public key를 가지고 있는 클라이언트에서 Public key를 접속할 서버로 전달하고 서버는 이를 암호화 한 뒤 클라이언트에게 전송하면, 클러이언트는 Private key로 복호화하여 인증합니다.  

     

    쉽게 말해서 두 개의 key 중 하나는 누구나 가질 수 있는 key고 나머지 하나는 클라이언트만 가질 수 있는 key입니다. 이를 가지고 같은 랜덤 한 문자열을  암호화 복호화하여 인증하는 방식으로 생각하면 됩니다. 

    아래 그림으로 간단하게 설명이 가능합니다. 

     

     

     

     

    ssh-keygen 생성 

    Step 1. node01 장비에서 key 생성 (RSA)

    [root@node01 ~]# ssh-keygen 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):     
    Enter passphrase (empty for no passphrase):                    
    Enter same passphrase again:                                
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:EApt8irb/tiXnKivla/llIeNwZqPZggmj/Ge9x/GIGw root@node01
    The key's randomart image is:
    +---[RSA 2048]----+
    |  ..  .          |
    |  ..o. .         |
    |   +. .          |
    |   ... .         |
    |   .E + S        |
    |=... = O         |
    |oX .=o*o*        |
    |o ===B=o .       |
    | oBO*+=..        |
    +----[SHA256]-----+

    Enter file in which to save the key (/root/.ssh/id_rsa):    

    - key 파일 저장 위치를 지정, 아무것도 입력하지 않으면 사용자의 하위 디렉토리인 ~/.ssh 에 기본으로 저장됩니다. 

    Private key와 Public key는 각각 id_rsa와 id_rsa.pub로 생성됩니다. 

     

    key가 이미 존재하는 경우 Overwrite 할지 물어보는데, 이는 매우 중요합니다. 사용하던 key를 덮어쓰기 하면 기존에 인증했던 서버들을 Public key를 배포해 다시 인증해야 합니다. 

     

    Default : ~/.ssh/

     

    Enter passphrase (empty for no passphrase): 

    - Private 키를 입력된 passphrase로 암호화해서 저장할지 물어봅니다.        


    Enter same passphrase again:                                 

    - passphrase 확인하는 단계입니다.

     

     

     

    Step 2. node01 키 생성 확인

    [root@node01 ~]# cd ~/.ssh/
    [root@node01 .ssh]# pwd
    /root/.ssh
    [root@node01 .ssh]# ls -al
    total 20
    drwx------   2 root root   80 Jan 11 22:27 .
    dr-xr-x---. 15 root root 4096 Dec  8 13:03 ..
    -rw-------   1 root root  395 May 29  2020 authorized_keys
    -rw-------   1 root root 1675 Jan 11 22:27 id_rsa
    -rw-r--r--   1 root root  393 Jan 11 22:27 id_rsa.pub
    -rw-r--r--   1 root root 2173 Aug 14 13:56 known_hosts

    id_rsa

    RSA 방식으로 생성된 private key

     

    id_rsa.pub

    RSA 방식으로 생성된 public key

     

    authorized_keys

    클라이언트 public key 키의 값을 저장합니다.

     

     

     

    Step 3. node02로 key 복사

    SCP를 이용해서 접속할 서버 Public Key 복사를 해줍니다. node01 장비의 id_rsa.pub 파일을 cat 명령어로 열어 직접 authorized_keys 파일에 복사할 수 있지만, 잘못된 복사 내용으로 인한 접속 불가가 일어날 수 있기 때문에 key를 복사 해준 뒤 리다이렉션 명령어를 통해서 복사해 줍니다. 

     

    [root@node01 .ssh]# scp id_rsa.pub 192.168.1.116:/tmp
    root@192.168.1.116's password: 
    id_rsa.pub                                    100%  393    90.2KB/s   00:00

     

     

     

    Step 4. node02 id_rsa.pub -> autorized_keys 복사

    [root@node02 tmp]# pwd
    /tmp
    [root@node02 tmp]# ls -al id_rsa.pub 
    -rw-r--r-- 1 root root 393 Jan 20 17:03 id_rsa.pub
    [root@node02 tmp]# cat ~/.ssh/authorized_keys 
    [root@node02 tmp]# cat id_rsa.pub >> ~/.ssh/authorized_keys 
    [root@node02 tmp]# cat ~/.ssh/authorized_keys 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtlkM0cDoz0PQn1WiP385+e1pOwGKR**********fLa6m72CWWuz+7RW7xKp3IsPdCHYWJI6dm+T4OTq34ve9Nq/oIa2qD8YQh74LTABdQmoztYx/l7AMJCRZBcgvj0m0nCG341y6Vk5QCvBX1sQePL+SQONdSynjleUarQrJwmPUd6U8JysbugX4cIqyZ5Ald37tcswJu3GbE+/tNiazNCNLfroxOAprMHuHrrYoyZQ4ECE+gbrGk/XjSlx0Iof2PDUQU0aqTmPATVaroiIQmhjKfPmBmMszUda0LDtfHcTE5gziObDiQDHgGGsZxO7EoAiUZ+FxD8DuCLT23nDrX root@node01

     

    ★ 권한 설정 

    더보기

    + 권한

    1. /home/[USER]/.ssh/authorized_keys 파일의 권한은 740으로 변경 필요

    # chmod 740 /home/[USER]/.ssh/authorized_keys

     

    2. /home/[USER]/.ssh 디렉토리의 권한은 700으로 변경 필요

    # chmod 700 /home/[USER]/.ssh

     

    3. /home/[USER] 디렉토리의 권한은 700으로 변경 필요

    # chmod 700 /home/[USER]

     

    Step 5. node01 -> node02 접속 확인 

    [root@node01 .ssh]# ssh 192.168.*.***
    Last login: Wed *** 20 16:34:24 20**
    [root@node02 ~]#

    패스워드 확인 없이 접속이 가능합니다. 

     

     

    반응형
    TOP