본문 바로가기

OS/Unix, Linux

SCP 명령문 기본, 필터 옵션 사용 방법

이 문서의 내용

    SCP(Secure Copy Protocol)란?

    SCP는 SSH 원격 접속 프로토콜 기반의 파일 전송 프로토콜(Secure Copy Protocol)입니다.

    네트워크가 연결된 환경에서 SSH와 동일한 22번 포트IdentityFile을 사용해서 파일을 송수신하기 때문에 보안적으로 안정된 프로토콜입니다.

    더보기

    IdentityFile이란?

    IdentityFile 옵션은 공개 키 인증에 사용되는 개인 키 파일(Private key file)을 의미합니다.

    예를 들어, 원격 호스트에 대한 엑세스를 위해 비밀번호 대신 사용되는 pem 또는 ppk 확장자의 파일이 있습니다. 

    기본적인 사용법은 다음과 같습니다.

    $ scp [옵션] [로컬 소스 파일 경로] [원격 디렉토리 경로]

    원격 디렉토리 경로는 다음 내용을 포함해야 합니다.

    • 원격 엑세스 계정 ID
    • 원격 엑세스 IP
    • 원격 디렉토리 경로

    로컬에서 로컬로 파일 전송

    SCP는 CP(CoPy) 의 기능을 포함하기 때문에 원격 파일 전송뿐만 아니라 로컬 디렉토리 간 파일 전송 역시 지원합니다.

    $ scp [옵션] [로컬 소스 파일 경로] [로컬 디렉토리 경로]

    예를 들어, 두 개의 디렉토리 dir1 dir2가 있고 file1 dir2로 이동시키려고 합니다.

    $ tree
    .
    ├── dir1
    │   └── file1
    └── dir2
    
    2 directories, 1 file

    경로는 상대 경로 및 절대 경로를 모두 사용 할 수 있습니다.

    SCP를 사용한 파일 전송은 파일 이동이 아닌 파일 복사입니다. 따라서 원본 소스 파일이 사라지지 않고 보존됩니다.

    $ scp dir1/file1 dir2
    $ tree
    .
    ├── dir1
    │   └── file1
    └── dir2
        └── file1
    
    2 directories, 2 files
    코드 비고
    Line 1 scp 별도의 옵션 없이 SCP를 실행합니다.
    dir1/file 로컬 소스 파일 dir1/file1을 복사합니다.
    dir2 로컬 디렉토리 경로는 dir2입니다.
    Line 2:9 tree 파일 복사이므로 로컬 소스 파일이 보존됩니다.

    로컬에서 원격으로, 원격에서 로컬로 파일 전송

    로컬에서 원격으로 파일 전송은 다음과 같이 실행합니다.

    $ scp [옵션] [로컬 소스 파일 경로] [원격 디렉토리 경로]

    원격에서 로컬로 파일 전송은 경로의 순서를 뒤집어 실행합니다.

    $ scp [옵션] [원격 소스 파일 경로] [로컬 디렉토리 경로]

    원격 디렉토리 경로는 다음 내용을 포함해야 합니다.

    • 원격 엑세스 계정 ID
    • 원격 엑세스 IP
    • 원격 디렉토리 경로

    예를 들어 로컬 소스 파일 dir1/file1192.184.80.3 원격 호스트의 /home/dir2에 이동시키려면 다음과 같이 실행합니다.

    이때 원격 호스트에 엑세스하기 위한 계정 ID는 root라고 가정합니다.

    $ scp dir1/file1 root@192.184.80.3:/home/dir2
    코드 비고
    Line 1 scp 별도의 옵션 없이 SCP를 실행합니다.
    dir1/file1 로컬 소스 파일 dir1/file1을 복사합니다.
    root@192.184.80.3 원격 호스트 192.184.80.3root 계정으로 엑세스합니다.
    :/home/dir2 원격 디렉토리 경로는 /home/dir2입니다.
    더보기

    SCP는 SSH 기반으로 동작하며 원격 호스트 엑세스 과정에서 별도의 개인 키 파일을 지정하지 않았다면 엑세스 계정의 비밀번호를 확인합니다.

    만약 보안상의 이유로 원격 호스트에 비밀번호 대신 개인 키 파일을 사용해야 한다면 SCP의 -i 옵션을 사용합니다.

    -i 옵션은 IdentityFile 사용을 의미하며 옵션 값으로 로컬 디렉토리에 위치한 개인 키 파일 경로를 입력합니다.

    $ scp -i [로컬 디렉토리의 개인 키 파일 경로] [로컬 소스 파일 경로] [원격 디렉토리 경로]

    경로의 전체 파일 전송

    만약 특정 소스 디렉토리 경로에 위치한 모든 파일을 전송하려고 한다면 다음과 같이 실행합니다.

    $ scp [옵션] [로컬 소스 디렉토리 경로]/* [원격 디렉토리 경로]

    /*는 디렉토리에 위치한 전체 파일(*)을 의미합니다.

    로컬 소스 디렉토리 dir1의 전체 파일을 dir2로 이동시키려고 합니다.

    $ tree
    .
    ├── dir1
    │   ├── file1
    │   ├── file2
    │   ├── fileA
    │   └── fileB
    └── dir2
    
    2 directories, 4 files

    dir1의 전체 파일을 이동하기 위해 dir1/*을 로컬 소스 파일 경로로 지정합니다.

    $ scp dir1/* dir2
    $ tree
    .
    ├── dir1
    │   ├── file1
    │   ├── file2
    │   ├── fileA
    │   └── fileB
    └── dir2
        ├── file1
        ├── file2
        ├── fileA
        └── fileB
    
    2 directories, 8 files

    경로의 특정 파일을 제외(필터)하면서 나머지 파일 전송

    특정 소스 디렉토리에 위치한 모든 파일 중 필터하여 나머지를 전송 할 수 있습니다.

    필터 패턴은 Shell globbing을 사용해서 지정 할 수 있습니다. 예를 들어, bash에서 특정 패턴을 제외시키려면 [!패턴]과 같이 사용합니다.

    더보기

    zsh 환경에서 특정 패턴을 제외시키려면 [\!패턴]과 같이 사용합니다.

    예를 들어 dir1에서 파일명에 대문자 알파벳 A부터 Z 문자를 포함하지 않는 파일만 전송하려면 다음과 같이 사용합니다.

    $ scp dir1/*[\!A-Z] dir2
    $ tree
    .
    ├── dir1
    │   ├── file1
    │   ├── file2
    │   ├── fileA
    │   └── fileB
    └── dir2
        ├── file1
        └── file2
    
    2 directories, 6 files

    반대로 특정 패턴의 파일만을 전송 할 수 있습니다.

    다음은 dir1에서 파일명에 1부터 9까지 문자를 포함하는 파일만 전송하는 예시입니다.

    $ scp dir1/*[A-Z] dir2
    $4 tree
    .
    ├── dir1
    │   ├── file1
    │   ├── file2
    │   ├── fileA
    │   └── fileB
    └── dir2
        ├── fileA
        └── fileB
    
    2 directories, 6 files

    SCP 옵션

    다음은 SCP에서 자주 사용되는 옵션입니다.

    옵션 비고
    -r 재귀적으로 하위 디렉토리를 포함한 모든 파일을 복사합니다. 
    만약 symbolic link가 포함된 경우에는 symbolic link를 생성하는 대신 원본이 가리키고 있는 파일 혹은 디렉토리를 복사합니다.
    -P SSH 과정에서 임의의 포트를 지정합니다. 디폴트는 22번 포트를 사용합니다.
    -i SSH 과정에서 IdentityFile 경로를 지정합니다. 디폴트는 password 사용합니다.
    -v verbose 모드로 상세 내역을 표시하며 디버깅 목적으로 사용합니다.
    -p 파일의 수정된 시간권한을 유지하며 복사합니다.
    더보기

    전체 옵션은 Commandlinux.com에서 확인 할 수 있습니다.