Scp 속도 향상 - Scp sogdo hyangsang

  머신러닝과 같이 큰 데이터를 다루는 일을 하다 보면 한 컴퓨터에서 다른 컴퓨터로 큰 파일을 옮겨야 하는 경우들이 자주 있습니다. 예를 들어 코딩은 내 컴퓨터에서 하고, 모델링을 하기 위해서 코퍼스를 서버로 옮기는 경우가 있겠죠. 외장하드를 이용할 수도 있고, USB 드라이브를 이용할 수도 있고, 플로피... 테이프... 아무튼 여러가지 방법이 있습니다.

1. 묶어서 scp

  이때 가장 많이 쓰는 방법 중 하나가 scp를 이용하는 것입니다. 대부분 서버에 ssh 서버가 설치되어있기 때문에 아주 간편하게 파일들을 복사할 수 있습니다. corpus라는 디텍토리가 있고 이 것을 서버로 통째로 보내고 싶다고 가정해보겠습니다.

$ tar -cf corpus.tar corpus
$ scp corpus.tar :/home/ceongjeein/Workspace/
(서버에서)
$ tar -xf corpus.tar

  보통 이런 식으로 옮길 데이터를 tar로 묶고, scp를 이용해서 서버로 옮긴 다음에, 서버에서 tar를 풀어줍니다.

Scp 속도 향상 - Scp sogdo hyangsang

2. 파이프를 이용해서 한 번에!

  첫번째 방법은 직관적이기는 하지만 임시로 쓸 tar 파일을 만들고 서버에서 또 풀어야 한다는 단점이 있습니다. 이를 해결하기 위해서 아래처럼 할 수 있습니다.

$ tar -cf - corpus | ssh  'cat - | tar -xf - -C /home/ceongjeein/Workspace'
  1. tar 파일을 만들 때 -f의 인자로 실제 파일 이름 대신 -를 주면 표준출력으로 결과를 보냅니다.
  2. 이 결과를 파이프를 통해서 ssh로 보내구요.
  3. ssh 마지막 인자를 통해서 서버의 명령을 원격으로 실행시킬 수 있습니다.
    이 경우에는 서버에서 'cat -xf - -C /home/ceongjeein/Workspace'를 실행시키는 것이고요.
  4. cat은 인자가 - 이면 표준 입력으로 받은 내용을 그대로 다시 표준 출력으로 보냅니다.
  5. tar는 파일을 만들 때와 마찬가지로 -f의 인자가 - 이면 실제 파일 대신 표준입력으로 데이터를 읽습니다.
    이 경우에는 ssh를 통해서 넘어오고 있는 corpus 묶음입니다.
    -C 옵션은 tar의 내용물을 풀 디렉터리입니다.
Scp 속도 향상 - Scp sogdo hyangsang

  이렇게 한 줄이면 중간 tar 파일을 만들 필요가 없이 현재 내 컴퓨터의 디렉터리를 통째로 서버로 보낼 수 있습니다. 타이핑이 좀 필요하긴 하지만, 익숙해지면 더 편하고 무엇보다 폼(?)이 나기도 합니다.

  그러나 문제가 하나 있습니다. 바로 두 방법 모두 SSH를 통해 파일을 복사하기 때문에 필연적으로 오버헤드가 발생하고 파일 전송 속도가 느려진다는 점입니다. (다른 주제지만 SSH는 보안을 위해서 인증, 암호화/복호화 등의 작업을 동반합니다).

Scp 속도 향상 - Scp sogdo hyangsang

  제가 테스트 삼아 만든 저 corpus 디렉터리는 약 4.7GB인데 LAN 상의 머신 사이에 옮길 경우 두 방법 모두 약 3분 정도가 걸립니다. 초당 26MB의 속도가 나오는 셈이죠. 빨리 데이터를 서버에 올려서 나의 엄청난 새로운 아이디어를 돌려보고 싶을 때는 정말 속 터지는 순간이죠. 물론 데이터 올리고 있다는 핑계로 잠시 바람을 쐬러 가기에는 참 좋은 이유이기도 합니다. (옛날에 컴파일 한번 걸어두고 나가서 한 바퀴 산책하고 오던 때가 생각하는군요.)

 3. nc를 이용해서 빠르게 복사하기

  보안을 생각한다면 SSH가 참 좋은 방법입니다. 하지만 나는 보안보다 파일을 빠르게 옮기고 싶다는 분들은 다른 방법이 있습니다. 바로 nc라는 명령을 사용하는 것입니다. (Mac에서는 homebrew를 사용해서 brew install netcat으로 설치하시면 됩니다.)

  nc는 여러 가지 기능이 있는데 그중 하나가 TCP 연결을 통해서 바로 데이터를 주고받을 수 있는 기능입니다. nc는 이런저런 오버헤드를 최대한 배제하고 통신에만 집중합니다. 물론 더 빠르겠죠?

  먼저 서버에 접속해서 아래와 같이 nc를 서버 모드로 실행시킵니다.

$ nc -l 1234 | tar -xf -

  -l 뒤에 숫자는 nc가 연결을 기다릴 포트입니다. 이렇게 nc를 띄워두면 데이터가 들어오는 순간 파이프를 통해 tar로 보내게 되고, tar는 표준 입력으로 들어오는 데이터를 현재 디텍토리에 풀기 시작합니다. (tar의 -가 뭔지 궁금하신 분들은 위 두 번째 방법에 설명이 있습니다)

  이 상태에서 보낼 데이터가 있는 내 컴퓨터에서 아래 명령을 실행합니다.

$ tar -cf - corpus | nc 192.168.86.36 1234

  tar가 corpus 디렉터리를 묶어서 표준 출력으로 보내고, nc는 이를 받아서 192.168.86.36 서버의 1234 포트로 데이터를 보냅니다. 이 명령이 완료되고 나서 서버쪽 콘솔을 보시면 파일들이 디렉토리 채로 고스란히 올라와있는 것을 볼 수 있습니다.

  똑같은 디렉토리를 이 명령으로 보내보았는데 약 45초가 걸렸습니다. 초당 104MB의 속도가 나온 셈이죠. 제 환경이 1 Gbps 망인데 거의 네트워크 대역폭을 다 쓴 셈입니다. SSH를 통하는 방법보다 무려 4배가 빠릅니다. (그리고 쉴 시간도 4배가 줄었습니다.)

Scp 속도 향상 - Scp sogdo hyangsang

4. 마무리

앞에도 언급했지만 SSH 대비 nc의 단점이 있습니다.

  • 서버에 먼저 접속에서 nc를 서버 모드로 실행시키야 합니다.
  • SSH와 다르게 종단 간 암호화가 되지 않기 때문에 누가 중간에서 나의 소중한 데이터를 훔쳐볼 수도 있습니다.

하지만 많은 경우 이 두 가지 단점을 상쇄시킬 정도로 nc의 매력이 있습니다. 필요에 맞는 좋은 도구를 선택하셔서 마음의 안정, 쉬는 시간 모두 얻으시길 바랍니다.

12 scp command examples securely transfer files linux

이 자습서에서는 구문 및 예를 사용하여 Linux 및 Unix에서 파일을 안전하게 복사하는 데 사용되는 보안 복사 프로토콜 또는 SCP 명령에 대해 설명합니다.

이 기사에서는 파일 전송에 사용되는 SCP (Secure Copy Protocol) 명령에 대해 설명합니다. 몇 가지 예를 통해 그것이 무엇이며 어떻게 작동하는지 볼 것입니다. 자, 먼저 SCP 명령이 무엇인지 이해해 보겠습니다.

Scp 속도 향상 - Scp sogdo hyangsang

학습 내용 :

  • SCP 명령이란?
    • SCP 프로토콜 구문
    • SCP 명령과 함께 사용되는 옵션
    • SCP 명령 예
    • SCP 명령에 대한 FAQ
  • 결론
    • 추천 도서

SCP 명령이란?

SCP (Secure Copy Protocol)는 컴퓨터 네트워크의 호스트간에 파일을 안전하게 전송하는 데 사용되는 네트워크 프로토콜입니다. Linux 및 Unix 계열 시스템에서이 명령 줄 유틸리티를 사용하면 로컬 호스트에서 원격 호스트로, 원격 호스트에서 로컬 시스템으로 또는 두 원격 호스트간에 파일 전송을 수행 할 수 있습니다.

Scp 속도 향상 - Scp sogdo hyangsang

[영상 출처 ]

SCP는 파일 전송을위한 SSH (Secure Shell) 메커니즘을 사용하여 데이터의 신뢰성, 암호화 및 기밀성을 보장합니다. 따라서 전송중인 데이터는 스누핑 공격으로부터 보호됩니다. 클라이언트는이 프로토콜을 사용하여 서버에 파일과 디렉토리를 업로드하고 다운로드 할 수 있습니다. 인증을 위해 암호 또는 키가 필요합니다. SCP의 기본 포트는 TCP 포트 22입니다.

SCP 프로토콜의 이점은 파일 전송을 위해 FTP 세션을 시작하거나 원격 호스트에 명시 적으로 로그인 할 필요가 없다는 것입니다.

SCP 프로토콜 구문

# 1) 로컬에서 원격 호스트로 파일 복사

scp [options] SourceFileName UserName@TargetHost:TargetPath

이것은 사용자 계정을 사용하여 현재 호스트에서 대상 호스트의 대상 경로로 소스 파일을 복사하는 SCP 명령의 매우 기본적인 구문입니다. 일반적으로 copy cp 명령과 매우 유사합니다.

# 2) 원격 호스트에서 로컬로 복사하는 경우

파일 복사 :

scp [options] UserName@SourceHost:SourceFilePath TargetFileName

또는, 파일을 다운로드하기 만하면됩니다.

scp [options] UserName@SourceHost:SourceFilePath

폴더 복사의 경우 (재귀 적으로) :

scp -r UserName@SourceHost:SourceDirectoryPath TargetFolderName

원격 호스트가 기본 포트 22가 아닌 다른 포트를 사용하는 경우 -P 옵션을 사용하는 명령에서 포트 번호를 명시 적으로 언급해야합니다.

# 3) 한 원격 컴퓨터에서 다른 원격 컴퓨터로 복사

scp [options] UserName@SourceHost:SourcePath UserName@TargetHost:TargetPath

한 원격 컴퓨터에서 다른 컴퓨터로 파일을 복사 할 때 트래픽은 컴퓨터를 통과하지 않습니다. 이 작업은 두 원격 서버간에 직접 수행됩니다.

# 4) 여러 파일 복사

localhost에서 원격 호스트로 여러 파일을 복사하려면 :

scp file1 file2 UserName@TargetHost:TargetDirectoryPath

원격 호스트에서 localhost의 현재 디렉토리로 여러 파일을 복사하려면 :

scp UserName@SourceHost:SourceDirectoryPath{file1, file2}

SCP 명령과 함께 사용되는 옵션

SCP 명령과 함께 가장 일반적으로 사용되는 옵션은 다음과 같습니다.

  • -씨 : C, 여기서 압축 활성화를 나타냅니다. 이 옵션을 사용하면 압축이 활성화되고 복사하는 동안 전송 속도가 빨라집니다. 소스에서 압축을 자동으로 활성화하고 대상에서 압축을 해제합니다.
  • -씨: c는 암호를 의미합니다. 기본적으로 SCP는 파일 암호화에 'AES-128'을 사용합니다. 암호를 변경하려면 -c 옵션 다음에 암호 이름을 사용해야합니다.
  • -i : i는 파일 ​​식별 또는 개인 키를 나타냅니다. 일반적으로 키 기반 인증은 Linux 환경에서 선택됩니다. 따라서 -i 옵션을 사용하여 개인 키 파일 또는 ID 파일을 구체적으로 언급 할 수 있습니다.
  • -엘: l은 대역폭 제한을 나타냅니다. 이 옵션을 통해 사용할 최대 대역폭을 설정할 수 있습니다. Kbits / s 단위입니다.
  • -비: 이 옵션은 복사하는 동안 배치 모드를 사용하는 데 사용됩니다.
  • -F : 이 옵션은 Linux 시스템에 연결하기 위해 다른 네트워크를 사용해야하는 상황에서 복사하는 동안 다른 ssh_config 파일을 사용하는 데 사용됩니다. 이러한 시나리오에서는 대체 사용자 별 SSH 구성 파일을 할당해야합니다.
  • -P : 대상 호스트의 ssh 포트 번호가 기본 포트 번호 22와 다른 경우 -P 옵션을 사용하여 포트 번호를 구체적으로 언급해야합니다.
  • -피: 이 옵션은 복사하는 동안 파일 권한, 수정 및 액세스 시간을 보존하는 데 사용됩니다.
  • -큐: 이 옵션은 자동 모드에서 SCP 명령을 실행합니다. 진행률 표시기가 꺼지고 Linux 터미널 화면에 ssh의 전송 진행률, 경고 또는 진단 메시지가 표시되지 않습니다.
  • -아르 자형: -r 옵션은 파일과 디렉토리를 재귀 적으로 복사하는 데 사용됩니다. 예를 들면대상 컴퓨터에 전체 폴더 (폴더 내부 내용 포함)를 복사하려면 -r 옵션을 사용해야합니다.
  • -S : 이 옵션은 연결에 사용할 프로그램을 지정하는 데 사용됩니다.
  • -V: v는 verbose를 의미합니다. 이 옵션은 터미널 화면에서 SCP 명령 실행의 단계별 진행 상황을 보여줍니다. 디버깅에 정말 도움이됩니다.

SCP 명령 예

예제를 통해 SCP 명령을 사용하는 방법을 이해하겠습니다.

예 1 : 로컬에서 원격 호스트로 복사

scp -v lockfile.txt : /home/cpf657/kaushapx/test1

위의 예에서

  • -v 옵션은 Linux 터미널에서이 명령의 출력 세부 사항을보기위한 자세한 옵션으로 사용됩니다. 자세한 출력을 사용하면 명령이 실행될 때 백그라운드에서 어떤 일이 발생하는지 정확히 알 수 있습니다. 이것은 디버그에 도움이됩니다.
  • Lockfile.txt는 원격 호스트로 전송할 소스 파일 이름입니다.
  • Kaushapx는 사용자 이름의 예입니다. 이 사용자 이름 계정을 사용하여 파일을 원격 호스트에 안전하게 복사합니다.
  • 10.172.80.167은 파일을 전송하려는 대상 원격 호스트의 IP 예입니다.
  • / home / cpf657 / kaushapx / test1은이 전송 된 파일을 저장할 절대 경로의 예입니다.

아래 스크린 샷은 위의 SCP 명령의 실행을 보여줍니다.

최고의 외장 하드 드라이브 복구 소프트웨어

Scp 속도 향상 - Scp sogdo hyangsang

Scp 속도 향상 - Scp sogdo hyangsang

예 2 : 원격 호스트에서 로컬 시스템으로 복사하는 경우 :

scp :/home/cpf657/kaushapx/test/parent/directory1/DemoFile.txt /home/tpf655/kaushapx

Scp 속도 향상 - Scp sogdo hyangsang

예 3 : 여러 파일을 원격 호스트에 복사하려면 :

scp DemoFile.txt log.xml :/home/cpf657/kaushapx/test

Scp 속도 향상 - Scp sogdo hyangsang

예 4 : 두 원격 시스템에서 파일 복사 :

scp :/home/cpf657/kaushapx/console.txt :/home/tpf655/kaushapx/test

Scp 속도 향상 - Scp sogdo hyangsang

예 5 : 파일 및 디렉토리를 재귀 적으로 복사하려면 (-r 옵션 사용) :

localhost에‘test’라는 폴더가 있고이 폴더에는 4 개의 파일이 포함되어 있다고 가정 해 보겠습니다. 원격 호스트에있는‘test1’이라는 다른 폴더 안에 전체 폴더를 복사하고 싶습니다.

다음 명령을 사용합니다.

scp -r test :/home/cpf657/kaushapx/test1

Scp 속도 향상 - Scp sogdo hyangsang

예 6 : 압축을 활성화하여 복사 속도를 높이려면 (-C 옵션 사용) :

예제 5에서했던 것과 동일한 폴더를 전송하겠습니다. 이번에는 압축을 활성화합니다.

scp -r -C test :/home/cpf657/kaushapx/test1

Scp 속도 향상 - Scp sogdo hyangsang

데이터웨어 하우징의 메타 데이터 란?

예 7 : 복사 중 대역폭 제한 (-l 옵션 사용) :

동일한 옵션을 계속하겠습니다. 이번에는 -l 옵션을 사용하고 대역폭 (예 : 500)을 지정합니다. 여기에 넣은 대역폭은 Kbit / s입니다.

Scp 속도 향상 - Scp sogdo hyangsang

예 8 : 복사하는 동안 다른 ssh 포트 지정 (-P 옵션 사용) :

파일을 복사하는 원격 서버가 기본 포트 22가 아닌 다른 포트를 사용하는 경우 -P 옵션을 사용하여 SCP 명령에서 포트 번호를 명시 적으로 알려야합니다. 예를 들면원격 서버의 ssh 포트가 2022이면 SCP 명령에서 -P 2022를 언급합니다.

scp -P 2022 console.txt :/home/tpf655/kaushapx/test

Scp 속도 향상 - Scp sogdo hyangsang

예 9 : 복사하는 동안 파일 권한, 수정 및 액세스 시간을 보존하려면 (-p 옵션 사용) :

scp -p console.txt :/home/cpf657/kaushapx/test1

Scp 속도 향상 - Scp sogdo hyangsang

예 10 : 자동 모드에서 파일 복사 (-q 옵션 사용) :

scp -q console.txt :/home/cpf657/kaushapx/test1

Scp 속도 향상 - Scp sogdo hyangsang

예 11 : 복사하는 동안 SCP에서 파일 식별 (-i 옵션 사용) :

위의 예에서 my_private_key.pem은 ID 파일 또는 개인 키 파일입니다.

Scp 속도 향상 - Scp sogdo hyangsang

예제 12 : SCP를 통해 복사하는 동안 다른 암호를 사용하는 경우 (-c 옵션 사용) :

scp -c 3des-cbc -r test1 :/home/tpf655/kaushapx/test

Scp 속도 향상 - Scp sogdo hyangsang

SCP 명령에 대한 FAQ

이 섹션에서는 SCP 명령에 대해 자주 묻는 질문을 다룰 것입니다.

Q # 1) SCP 명령은 무엇입니까?

대답: SCP는 Secure Copy Protocol을 의미합니다. SCP 명령을 사용하면 네트워크의 호스트간에 안전하게 파일 복사를 수행 할 수 있습니다. 데이터 전송을 위해 SSH의 메커니즘을 사용합니다. 키 또는 암호 기반 인증을 사용합니다.

Q # 2) Linux에서 SCP는 무엇을합니까?

대답: Linux에서 SCP 명령은 안전한 방식으로 서버간에 파일을 전송합니다. 원격 서버와 로컬 호스트 또는 두 원격 서버 간의 파일 복사 일 수 있습니다. SCP는 Linux에 사전 설치된 명령이며 단순성과 보안으로 유명합니다.

Q # 3) Linux에서 파일을 어떻게 SCP합니까?

답변 : 다음 명령 구문으로 파일을 SCP 할 수 있습니다.

scp [options] [username@][source_host:]file1 [username@][destination_host:]file2.

SCP 명령과 함께 많은 옵션을 사용할 수 있습니다. 예를 들면-C는 압축, -c는 암호, -P는 포트, -I는 개인 키, -l은 제한, -r은 재귀 복사 등입니다.

Q # 4) 파일에 SCP를 어떻게 지정합니까?

대답: Q # 3에서 언급 한대로 SCP 명령을 사용하여 파일에 SCP를 지정할 수 있습니다.

Q # 5) SCP는 복사 또는 이동합니까?

대답: SCP 명령은 소스에서 대상으로 파일을 복사합니다. 따라서 SCP 이후에 파일은 두 호스트 모두에 존재합니다.

Q # 6) 디렉토리에 SCP를 사용할 수 있습니까?

대답: 예, 디렉토리에 SCP를 사용할 수 있습니다. 내용과 함께 전체 디렉토리를 복사하려면 -r 옵션을 사용해야합니다.

다음은 로컬 호스트에서 원격 호스트로 디렉토리를 복사하기위한 SCP 명령 구문입니다.

scp -r localhost_path_to_directory username@target_server_ip:/path_to_target_directory/

Q # 7) 디렉토리의 모든 파일에 SCP를 어떻게 사용합니까?

대답: 디렉터리의 모든 파일에서 SCP를 사용하려면 디렉터리 경로와 함께 *를 추가해야합니다.

scp -r localhost_path_to_directory/* username@target_server_ip:/path_to_target_directory/

이렇게하면 로컬 디렉터리 내의 모든 파일이 원격 디렉터리로 복사됩니다.

Q # 8) Windows에서 SCP를 사용할 수 있습니까?

대답: 예, Windows에서 SCP를 사용할 수 있습니다. 그러나 Linux 및 Mac과 달리 Windows에서는 사전 다운로드되지 않으므로 Windows의 경우 별도로 SCP 소프트웨어를 설치해야합니다.

Windows 용 SCP (Putty SCP (PSCP)라고하는 소프트웨어)를 포함하는 Putty를 다운로드하거나 WinSCP (Windows Secure Copy)를 다운로드 할 수 있습니다. PSCP 클라이언트는 Windows 명령 프롬프트에서 직접 실행됩니다. Windows에서 SCP를 사용하기위한 다른 소프트웨어도 있습니다. .

Q # 9) 여러 파일에 SCP를 어떻게 사용하나요?

대답: SCP를 사용하여 localhost에서 원격 호스트로 여러 파일을 복사하는 경우 :

scp file1 file2 UserName@TargetHost:TargetDirectoryPath

SCP를 사용하여 원격 호스트에서 localhost의 현재 디렉토리로 여러 파일을 복사하는 경우 :

scp UserName@SourceHost:SourceDirectoryPath{file1, file2}

Q # 10) SCP와 SFTP의 차이점은 무엇입니까?

대답: SCP는 보안 복사 프로토콜입니다. SFTP는 보안 파일 전송 프로토콜입니다. 둘 다 TCP 포트 22를 사용하고 SSH 메커니즘에서 실행됩니다. 그러나 사양과 기능이 다릅니다.

SCP는 데이터 만 전송하는 반면 SFTP는 파일 전송 외에 파일 액세스 및 파일 관리 기능도 수행합니다. SFTP를 사용하면 원격 디렉토리 나열 또는 파일 삭제와 같은 작업을 수행 할 수 있습니다. 그러나 SCP는 서버 간의 파일 및 디렉토리 복사 만 허용합니다.

SCP의 파일 전송 속도는 파일 전송에 더 효율적인 알고리즘을 사용하기 때문에 SFTP보다 빠릅니다.

SFTP에서는 명령 줄 클라이언트에서 중단 된 파일 전송을 재개 할 수 있습니다. 그러나 SCP에는이 기능이 없습니다.

.eps 파일을 여는 방법

SFTP는 GUI 구성 요소를 제공하지만 SCP에는 해당 구성 요소가 없습니다.

Q # 11) 파일을 안전하게 복사하기위한 Windows의 SCP 명령은 무엇입니까?

대답: Windows 명령 프롬프트를 열고 아래 명령을 입력하여 Windows 로컬 컴퓨터에서 서버로 안전하게 파일을 복사합니다 (Linux 서버 일 수 있음).

pscp 파일 경로 userid @ target_server_ip : target_path

예: pscp c : desktop sample.txt : /tmp/foo/sample.txt

이 명령을 실행하려면 PSCP가 설치되어 있어야합니다.

Q # 12) SCP는 안전한가요?

대답: 예, SCP는 안전합니다. 데이터 전송을 위해 SSH (Secure Shell Protocol) 메커니즘을 사용하므로 SSH가 제공하는 보안의 이점을 얻습니다. 전송중인 데이터는 기밀로 유지되며 신뢰성도 보장됩니다.

결론

이 자습서에서는 FTP 세션을 시작하거나 원격 시스템에 명시 적으로 로그인하지 않고 두 원격 호스트간에 또는 로컬 호스트와 원격 호스트간에 파일을 안전하게 복사하기 위해 SCP 명령을 사용하는 방법을 살펴 보았습니다.

SCP는 데이터 복사를 위해 SSH 메커니즘을 사용하므로 전송중인 데이터가 암호화되고 보호됩니다. 인증을 위해 암호 또는 키가 필요합니다. RCP (원격 복사 프로토콜) 또는 FTP (파일 전송 프로토콜)와 달리 SCP는 네트워크에서 스누핑을 보호하기 위해 시스템간에 교환되는 파일과 암호를 모두 암호화합니다.

추천 도서