Original article: SCP Linux Command – How to SSH File Transfer from Remote to Local

컴퓨터나 저장 능력이 있는 어떤 전자 기기로 작업한다면, 여러 방식으로 정보나 파일을 나누고 공유하게 될 것입니다.

자주 공유되는 파일로는 오디오 파일, 이미지, 비디오, PDF나 어떤 형태의 워드 문서가 포함됩니다.

대부분의 경우 공유되는 정보는 특정 무리나 개인을 위한 사적이고 기밀인 경우가 많아 이를 보호하는 것이 필수적입니다.

모바일 휴대폰 같은 경우라면, xender, appshare 같은 앱과 심지어 블루투스의 기능으로도 파일 전송이 가능합니다. 자 이제 컴퓨터의 경우도 마찬가지입니다. 소프트웨어나 때로는 사이트가 이를 똑같이 가능하게 합니다.

리눅스 같은 운영 체제 안에서의 데이터 공유라 한다면, 정보를 공유하고자 할 때 선택할 수 있는 다양한 명령이 있습니다. 하지만, 오늘은 SCP 명령에 집중해보고자 합니다. 이 명령어를 통해 안전하고 쉽게 파일과 데이터를 공유할 수 있습니다.

오늘날 시장에선 리눅스 기술을 가지는 것이 매우 중요하며, 여러분이 시스템 관리자라면 이는 더욱더 도움이 됩니다. 시스템 관리자로서 데이터 공유는 매일 일상적인 행위가 될 텐데 이때 데이터가 안전하게 공유될 필요가 있습니다. SCP 명령을 통해 이것이 가능합니다.

시작하기 전에, 대체 SCP가 무엇인지 이해해보고 파일 전송에 쓸 수 있는 몇 가지 명령어를 배워봅시다.

SCP 명령어가 뭔가요?

SCP는 Secure Copy Protocol의 머리글자입니다. 이 명령행 유틸리티를 이용해 사용자는 주로 유닉스(unix)나 리눅스(linux) 두 위치 사이에서 파일이나 디렉터리를 안전하게 복사할 수 있습니다.

이 프로토콜은 악의를 가진 어떤 이의 민감성 정보 취득을 방지하기 위해 파일 전송의 암호화를 보장합니다.

간단하게 말해서 SCP가 cp (copy) 명령을 위한 더 안전한 선택지라는 것입니다.

SCP가 SSH (Secure Shell) 연결을 통한 암호화를 이용한다는 것, 그래서 수상한 공격으로부터 전송 중인 데이터가 보호된다는 점이 중요하단 것을 알아두세요.

SCP 문법

터미널에서 쓰이는 다른 명령어처럼, SCP도 성공적으로 실행되기 위한 일종의 형식이 있습니다. 이 문법을 이해하면 더 쉽게 명령어를 작성할 수 있게 됩니다.

scp [OPTIONS] [[user@]src_host:]fil1 [[user@]dest_host:]file2
  • scp - 명령을 초기화하고 시큐어 셸이 준비되도록 합니다.
  • OPTIONS - 어떻게 쓰이는지에 따라 다른 권한을 부여합니다. 가장 많이 쓰이는 옵션은 아래와 같습니다.
  • P(대문자) - 원격 호스트와 연결하기 위해 포트를 특정합니다.
  • p(소문자) - 수정과 열람의 편의성을 위해 타임 스탬프를 보존합니다.
  • r - 디렉터리 전체를 재귀적으로 복사합니다.
  • q - 진행 메시지를 표시하지 않고 조용히 파일을 복사합니다. 콰이어트 모드라고도 합니다.
  • C - 전송 중 데이터 압축을 위한 옵션입니다. OPTIONS에 관해서 더 알아보고 싶다면 scp 옵션들을 읽어보세요.
  • src_host - 파일이 호스트 되는 곳입니다. 소스(source)는 파일의 위치에 따라 클라이언트나 서버 중 하나가 될 수 있습니다.
  • dest_host - 파일이 복사되어 가는 곳입니다.

파일을 전송하려면, 컴퓨터가 한 대 이상 있어야 합니다. 아래의 경우에서 SCP 명령어를 사용할 수 있습니다.

  • 같은 컴퓨터 내에서 파일 복사하기
  • 로컬 호스트에서 원격 호스트로 또는 그 반대의 경우에서 파일 복사하기
  • 서로 다른 두 원격 서버 사이에서 파일 복사하기

이쯤에서, SCP 명령어를 사용하기 전 필요한 몇 가지를 짚고 가야겠습니다.

  • 클라이언트와 서버 컴퓨터에 모두에 SSH가 설치되어 있어야 합니다.
  • 클라이언트와 서버 컴퓨터에 모두 Root 권한 접근이 가능해야 합니다.

이 두 가지가 준비되었다면, 명령어를 확인하러 가봅시다.

대표적인 SCP 명령어

로컬 호스트에서 원격 서버로 파일 복제하기

파일 복사 시에 파일 및 데이터를 로컬 저장소에서 원격 서버로 전송할 수 있다는 것은 매우 중요합니다. 이것이 가능해지려면 SCP 명령어를 사용할 때 몇 가지를 명시해주어야 합니다.

원천(source)으로서의 파일 경로와 복제되어 가는 원격 호스트의 경로를 명시해야 합니다.

test.txt라는 파일을 원격 서버로 복제하는 상황을 생각해봅시다. 명령어는 아래와 같을 것입니다.

scp test.txt userbravo@destination:/location2

복제하고자 하는 파일 수에는 제한이 없습니다. 데스크톱 안에 web이라는 폴더 속 .php 확장자를 가진 파일이 있고, 이를 원격 서버의 홈 디렉터리로 복사하고자 한다고 해봅시다. 명령어는 아래와 같을 것입니다.

scp *.php userbravo@destinatino_host:/~/

*.php - 현재 명시된 폴더 내 .php 확장자를 가진 모든 파일을 복사합니다.
/~/ - 이를 홈 디렉터리로 복사한다는 의미입니다.

이번에는 port 옵션 중 하나를 사용해 test.txt 파일을 복사해서 원격 서버에 다른 이름으로 저장하고자 한다면, 명령어는 아래와 같을 것입니다.

scp -P 8080 test.txt userbravo@destination_host:/user/home/test2.txt

방금 예시에서는 port 8080을 이용해 로컬의 test.txt 파일을 원격으로 전송해 test2.txt로 저장해보았습니다.

원격에서 로컬로 파일 복사하기

예시를 활용하면 더 이해하기 쉽습니다. 원격 시스템에서 파일을 복사해오는 상황이라고 생각해봅시다. 파일을 복사하려면 SCP로 시작해 원격의 유저이름@IP 주소와 파일의 경로를 나열합니다.

경로를 지정하지 않으면, 사용자의 홈 디렉터리를 기본값으로 간주하며, 파일이 로컬로 저장되는 경로를 따릅니다.

문법

scp file <원격의_유저이름>@<IP_또는_호스트>:<파일의_경로> <로컬_파일_경로>

*192.168.1.100.*이라는 주소의 원격 기기에서 linuxcheatsheet이라는 이름의 파일을 복사한다고 가정해봅시다.

linuxcheatsheet 파일은 kali라는 사용자의 홈 디렉터리에 저장되어 있으며, 이 사용자를 인증해야 합니다. 그러니 콜론 뒤에, 이미 홈 디렉터리라는 기본값으로 설정이 되어 있으니 별도의 경로를 설정하지는 않아도 되며, 파일 이름("linuxcheatsheet")만 작성해줍니다. 이제 파일을 저장하기 위한 로컬 파일 경로로써 점(.)을 타이핑해 현재 디렉터리를 표시해줍니다.

scp linuxcheatsheet lary@192.168.1.100: .

원격 호스트로부터 다른 원격 호스트로 파일을 복사하기

파일 전송에서 SCP를 사용하는 것의 장점은 로컬 컴퓨터 간의 연결뿐만 아니라 원격 서버 간의 연결도 가능하다는 것입니다.

test.txt라는 파일을 다른 원격 서버로 복사하려고 한다면, 명령어는 아래와 같을 것입니다.

scp user1@host1.com:/files/test.txt user2@user2.com:/files

이 명령어가 하는 일은 user1의 files 폴더에서 test.txt를 복사하고, host2.com 위에서 실행되는 user2에 files 폴더로 해당 복사본을 생성하는 것입니다.

파일 여러 개를 복사하기

여러 파일을 복사할 때는 원본 경로로써 파일 이름을 지정해주기만 하면 됩니다. 예를 들어 봅시다.

문법

scp file1 file2 ... user@<사용자의_IP_주소>: 도착지

files 1, 2, 3, 4를 복사한다고 해봅시다. 명령어는 아래와 같을 것입니다.

scp file1.txt file2.txt file3.txt file4.txt user1@host1.com:/home/user/Desktop

핵심 포인트

  • 파일을 복사하려면, 원본 파일의 읽기 권한이, 목표 시스템에는 쓰기 권한이 있어야 합니다.
  • SCP 명령어는 안전한 데이터 전송을 위해 SSH에 의존하기 때문에 원격 시스템에 인증하기 위해 암호를 설정해야 합니다.
  • 같은 이름과 위치에서 파일을 복사할 때는 SCP 명령어에서 별도로 경고하지 않고 덮어쓰기 할 수 있으므로 주의해야 합니다.
  • 로컬과 원격 위치를 구분할 때는 쌍점(:)을 사용합니다.

마무리

기술지원이든, 시스템 관리자든, 혹은 저처럼 리눅스를 사용하며 성장하고 있거나 배우고 싶은 개발자라면 언젠가는 파일 전송이 필요한 때가 올 것입니다. 이 SCP 명령어를 알고 있으면 도움이 될 것입니다.

이 글에서는, SCP를 사용하려고 할 때 만날 수 있는 가장 흔한 경우를 다뤄보았는데, 뭔가 새로운 것을 얻어가셨기를 바랍니다.

즐거운 코딩 되시길 ❤