기본기/OS

[ubuntu] 일정시간마다 리눅스 서버로 파일전송 (crontab+scp)

dohyeon2 2022. 2. 4. 14:31

목차

    2022-02-04

    리눅스에서 다른 리눅스 서버로 일정시간마다 파일을 전송해줘야 하는 task가 생겼다.

    기본적으로 쉘 스크립트에 scp 코드를 작성하여 보내려고 했으나 매번 비밀번호를 수동으로 

    입력해줘야 하는 문제가 발생하였다. 찾아보니 공개키를 이용하면 추가적인 비밀번호 입력없이 

    scp로 파일을 전송할 수 있다고 해서 공부하면서 작성해보려 한다.


    PC 1 (호스트)

    1. 공개키 생성

    ssh-keygen -t rsa

    위 명령어를 입력하면

    "Generating public/private rsa key pair"
    "Enter file in which to save the key ... "
    와 같이 나오는데 default로 그냥 enter를 누른다

     

    "Enter passphrase (empty for no passphrase):"

    또 위와같은 텍스트가 나오면 passphrase를 사용하지

    않기때문에 enter를 두번 누른다

     

    "Your identification has been saved in ... "
    "Your public key has been saved in ... "
    방금 만든 공개키 파일명과 위치를 기억하라 (항상 파일명이 .pub로 끝난다)

     

    나의 경우 /home/msdl/.ssh 디렉토리에 공개키와 개인키가 저장되었다.

    cd /home/msdl/.ssh
    ls

    해당 디렉토리에 들어가서 공개키가 잘 저장되었는지 확인한다.

     

    2.공개키를 scp로 대상 서버에 복사

    scp -P 포트번호 /home/msdl/.ssh/id_rsa.pub msdl@아이피주소:/home/msdl

     

    PC 2 (서버)

    1. 공개키 생성

    ssh-keygen -t rsa

    2.  PC 1에서 받아온 공개키를 PC 2 authorized_keys 에 등록

    cat /home/msdl/id_rsa.pub >> /home/msdl/.ssh/authorized_keys

     

    이렇게 하면 다음부터 scp 로 파일을 전송할 때 추가적으로 비밀번호를 입력하지 않아도 된다!! (삶의 질 상승 ...)

     


    오류

    만약 .ssh 파일 혹은 디렉토리를 찾을 수 없다는 에러를 만나면 

    다음의 순서에 따라 하면 해결할 수 있다.

     

    1. .ssh 디렉토리 생성

    mkdir ~/.ssh

    2. .ssh 폴더 권한부여

    chmod 700 ~/.ssh

    3. authorized_keys 파일 생성

    touch ~/.ssh/authorized_keys

    4. authorized_keys 파일에 권한부여

    chmod 600 ~/.ssh/authorized_keys

    5. 마지막으로 PC 1 에서 받아온 공개키를 authorized_keys 에 추가

    cat /home/msdl/id_rsa.pub >> ~/.ssh/authorized_keys

    2022-02-04 추가 작성

     

    1. PC 1 crontab 세팅

    위와 같이 핵심은 /home/msdl/script.sh 쉘 스크립트 절대경로 앞에 bash 를 넣어주는 것이었다!! 

    (한참 고생했다 ㅠㅠ)

     

    2. PC 1 script.sh 세팅

    ※ 주의 (위와 같이 쉘 스크립트 안에 scp 뿐만 아니라 다른 명령어를 넣을 때 backtick 부호 ( ` ) 로 감싸주어야 한다!!) ※

     

    3. PC 1 directory file list 

     

    4. PC 2 directory file list

    다음과 같이 일정시간마다 자동으로 파일을 전송해주는 스크립트가 완성되었다!