[Linux]SSH의 키 기반 인증으로 원격 접속과 scp 명령어로 파일 전송

SSH 프로토콜을 사용하여 원격 접속 및 파일 전송의 보안 기능을 강화할 수 있습니다. Linux 서버 취약점 분석/조치법 중 “root 계정 원격접속 제한”을 참고하시기 바랍니다.

  1. ssh-keygen 명령어로 private key 및 public key 생성
  2. ssh-copy-id 명령어로 원격 접속 서버에 public key 전송
  3. scp 명령어로 파일 전송(로컬 ↔ 원격)
  4. Daily Health Check“과 “Linux에서 메일 보내기” 기능과 함께 사용

1. ssh-keygen 명령어로 private key 및 public key 생성

  • SSH는 키 기반 인증을 지원하므로, 비밀번호 입력없이 ssh 프로토콜로 원격 호스트에 접속하려면 개인키와 공개키를 생성해야 합니다.
  • ssh-keygen 명령어 디폴트로 /홈디렉토리/.ssh/ 디렉토리에 개인키와 공개키 파일을 생성합니다.
  • 명령어 사용법
    $ ssh-keygen [옵션]
    -b 비트값: 키값의 비트를 지정
    -t 알고리즘: rsa, dsa 등 공개키의 알고리즘 지정
    -f 파일명: 저장할 키값의 파일명 지정
    -R [hostname|IP-address]: ~/.ssh/known_hosts 파일로부터 지정한 호스트 또는 IP address의 호스트 키를 삭제
    [root@centos8 ~]# ssh-keygen -b 2048 -t rsa
    Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): (엔터) Created directory '/root/.ssh'. 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:5cH1WzKpF1rBkVF28xrNe1x0vkVmiS23q7nc0nuE4Yg root@localhost The key's randomart image is: +---[RSA 2048]----+ | ..**@| | . . +o/=| | + @ X| | o . +.@=| | S ..oo+=+| | E ..o.o| | +. | | .+...| | oooo| +----[SHA256]-----+ ## ~/.ssh/ 디렉토리에 비밀키와 공개키 확인 ## [root@centos8 ~]# ls -l .ssh/ -rw-------. 1 root root 1679 Jan 7 01:17 id_rsa //비밀키 -rw-r--r--. 1 root root 396 Jan 7 01:17 id_rsa.pub //공개키

2. ssh-copy-id 명령어로 원격 접속 서버에 public key 전송

  • 공개 키를 원격 시스템의 ~/.ssh/authorized_keys 파일에 추가함으로써 인증 절차를 설정합니다. 이로써 패스워드 없이 안전하게 원격 시스템에 접근할 수 있습니다. t2 호스트는 /etc/hosts 파일에 등록되어 있습니다.
    [root@centos8 ~]# ssh-copy-id root@t2
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host 't2 (192.168.56.102)' can't be established. ECDSA key fingerprint is SHA256:7KKUOGIckRuOFWnOxvsR1jBDQB9iYSjKGHahzFXtwtE. ECDSA key fingerprint is MD5:85:01:43:b0:08:d9:12:48:aa:ce:4e:0e:23:ad:50:2c. Are you sure you want to continue connecting (yes/no)? yes /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 root@t2's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@t2'" and check to make sure that only the key(s) you wanted were added. [root@centos8 ~]# systemctl restart sshd.service
  • 참고로 공개키 방식의 로그인을 차단하려면 “/etc/ssh/sshd_config” 환경설정 파일을 아래와 같이 변경하면 됩니다.
    PubkeyAuthentication 지시자의 주석처리를 삭제하고 yes를 no로 변경하고, AuthorizedKeysFile 지시자를 주석처리 합니다.
    ----- More -----
    PubkeyAuthentication no
    
    # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
    # but this is overridden so installations will only check .ssh/authorized_keys
    #AuthorizedKeysFile      .ssh/authorized_keys
    ----- More -----
    
  • t2 호스트의 /root/.ssh/authorized_keys 파일의 내용을 확인해 봅니다.
    [root@t2 ~]# cat /root/.ssh/authorized_keys 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9DzFSg+YpoAuq3XhSHdk+/Cz4yxjaiVZhaWz6+cDdi73jp2LtZ9mvWvn9JGTk2Xro/H+kku6lwcFL/PoMpAzxq3EKfA7ycKnhidY+U9j77D+W8pauHbV7XLHVzOjzPR3N3QqtT7gUMNwqo+vxZlQxEQztkMgAn1xF9m4JAPk/ySv8B3JvY/OxRzKYKwxYvh9BEWvFR9G1nLOMmbjzGcrmJpFCJXySZ3cpHP471we+uC436wYJ7TbZrPNthSsCvT+Nwfkv/WgEmROKEabfZWNW5qwbTPHarApZKqfWX6Nn7EMsCxn6Z/m2Fl6CB2edk1O+0MeP3kKDqgrFps14QsH9 root@centos8
    

3. scp 명령어로 파일 전송(로컬 ↔ 원격)

  • 암호 입력없이 로컬 호스트(centos8)에서 원격 호스트(t2)로 파일 전송 테스트, 원격 호스트에서 로컬 호스트로 파일 전송도 가능
    [root@centos8 ~]# scp scptest.txt root@t2:/root/scptest.txt
    scptest.txt                           100%   12    19.8KB/s   00:00
    
    [root@t2 ~]# cat /root/scptest.txt 
    scptest.txt
    

4. “Daily Health Check“과 “Linux에서 메일 보내기” 기능과 함께 사용

  • 사용할 원격 호스트들은 /etc/hosts 파일에 등록해도 되고, 직접 IP주소를 입력해도 됩니다.
    vi send_email_after_scp.sh
    #!/bin/bash
    
    NOW=$(date +"%Y_%m_%d")
    HOSTS="host1 host2"
    HEALTHCHECK="healthcheck.log"
    RETURN_ADDR="your_id@naver.com"
    TO_ADDRS="id1@domain.com id2@domain.com"
    
    for host in HOSTS
    do
    scp root@host:/root/${HEALTHCHECK} /root/${host}_${NOW}_${HEALTHCHECK}
    mail -s "Daily Health Check Report(${host})" -r ${RETURN_ADDR} ${TO_ADDRS} < /root/${host}_${NOW}_${HEALTHCHECK}
    done
    

함께 읽어보면 좋은 Contents

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다