매일 업데이트
2023-08-15 04:15 17 min

파일 및 폴더를 복사하는 예제가 포함된 16개의 일반적인 SCP 명령

SCP는 SSH 프로토콜과 아주 깊은 연관성을 가지며, 사실상 동일한 개념에서 발전했습니다.

SCP는 SSH 프로토콜을 확장한 것으로, 데이터 전송 과정에서 정보의 기밀성을 유지하고 변조를 방지하는 역할을 합니다.

이제부터 SCP의 작동 원리를 이해하고, scp 명령어 사용법을 자세히 살펴보겠습니다.

SCP란 무엇인가?

SCP는 Secure Copy Protocol의 약자입니다.

SCP는 로컬 호스트와 원격 호스트 간 또는 두 원격 호스트 간에 파일과 디렉토리를 안전하고 효율적으로 복사하는 데 사용됩니다.

네트워크를 통해 데이터를 안전하게 전송하는 데 널리 활용되며, SSH(Secure Shell)를 기반으로 보안 연결을 설정하고 전송되는 데이터를 암호화합니다.

단일 파일을 전송하거나 전체 디렉토리를 복사해야 할 때, SCP는 원격 파일 전송을 위한 매우 안정적인 솔루션을 제공합니다.

SCP는 어떻게 동작하는가?

SCP는 암호화된 네트워크 프로토콜인 SSH 프로토콜 위에 구축되어 안전한 원격 로그인과 명령어 실행을 가능하게 합니다. SSH와 동일한 보안 메커니즘을 사용하여 전송 중 데이터를 보호하며, 암호화 및 인증 과정을 포함합니다.

SCP를 사용할 때, 사용자는 복사 명령을 로컬 시스템에서 시작하여 원격 시스템의 소스 파일과 대상 위치를 지정합니다. SCP는 원격 시스템에 SSH 연결을 설정한 후, 소스에서 대상으로 파일을 안전하게 복사합니다.

언제 SCP를 사용해야 할까?

SCP는 다음 상황에서 특히 유용합니다.

원격 서버 백업

SCP를 활용하면 원격 서버의 데이터를 로컬 시스템으로 백업하거나 그 반대로 백업할 수 있어 데이터 중복 및 재해 복구를 보장할 수 있습니다.

애플리케이션 배포

다수의 서버에 애플리케이션을 배포할 때 필요한 파일을 각 대상 시스템에 안전하게 복사하여 배포 프로세스를 간소화할 수 있습니다.

대용량 파일 전송

이메일 첨부 파일로 보내기에는 너무 큰 대용량 파일 전송 시 안정적이고 안전한 대안을 제공합니다.

안전한 파일 공유

SCP를 통해 기밀 파일을 안전하게 공유할 수 있으며, 데이터 전송 중 암호화를 통해 정보의 기밀성을 유지할 수 있습니다.

원격 협업

SCP를 사용하여 다른 지역에 있는 협업자나 팀원들과 파일을 안전하게 공유할 수 있습니다.

SCP 명령 구문

SCP 명령어를 사용하기 전에 기본 구문을 이해하는 것이 중요합니다.

SCP 명령어의 기본 구문은 다음과 같습니다.

scp [옵션] [소스] [대상]

구문 설명:

옵션

SCP 명령어의 동작을 변경하는 선택적 플래그입니다. 다양한 옵션을 사용하여 전송 프로세스를 사용자 정의할 수 있습니다. 몇 가지 일반적인 옵션은 다음과 같습니다:

-r: 디렉토리 및 해당 콘텐츠를 재귀적으로 복사합니다.
-p: 원본 파일의 권한, 타임스탬프 및 모드를 유지합니다.
-P: SSH 연결을 위한 포트 번호를 지정합니다.
-i: SSH 인증을 위한 개인 키 파일을 지정합니다.
-C: 압축을 사용하여 데이터 전송 속도를 높입니다.
-l: 전송에 사용되는 대역폭을 제한합니다 (Kbit/s 단위).
-v: Verbose 모드 – 전송 중에 디버깅 메시지를 표시합니다.
-o: SSH 클라이언트에 옵션을 전달합니다. 엄격한 호스트 키 검사를 비활성화하는 데 사용할 수 있습니다.

소스

소스는 복사하려는 파일이나 디렉토리를 지정합니다. 이는 상황에 따라 로컬 경로 또는 원격 경로가 될 수 있습니다.

대상

대상은 소스를 복사할 위치를 지정합니다. 소스와 마찬가지로 로컬 또는 원격 경로일 수 있습니다.

명령 예시

#1. 로컬에서 원격 서버로 파일 복사

scp /path/to/local/file.txt user@remotehost:/path/to/destination/

/path/to/local/file.txt: 로컬 시스템에서 복사할 원본 파일의 경로입니다.

user@remotehost: 'user'를 원격 사용자의 이름으로, 'remotehost'를 원격 서버의 호스트 이름 또는 IP 주소로 바꿔야 합니다.

/path/to/destination/: 파일이 복사될 원격 서버의 대상 경로입니다.

예시:

파일 전송을 위해 원격 서버를 하나 선택했습니다.

원격 호스트 사용자 이름: abhishekvarma

원격 호스트 주소: 192.168.29.70

scp /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

원격 컴퓨터에 연결하는 동안 비밀번호를 입력하라는 메시지가 표시됩니다. 여기에서는 복사할 zip 파일을 선택했습니다.

결과:

원격 서버에 성공적으로 연결되면 다음과 같은 출력이 표시됩니다.

sample.zip                                    100%   20KB  717.9KB/s   00:00

#2. 원격에서 로컬 시스템으로 파일 복사

scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

위와 동일하게 사용자 이름 및 원격 호스트 주소를 적절히 변경해야 합니다.

예시:

scp [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

결과:

이것은 단순 예시 출력이며, 실제 타임스탬프는 연결 속도에 따라 달라질 수 있습니다.

sample.zip                                    100%   20KB  51.2KB/s   00:00

#3. 디렉토리 재귀적으로 복사

scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

여기서 '-r' 플래그는 SCP에게 디렉토리를 하위 디렉토리 및 해당 내용을 포함하여 재귀적으로 복사하도록 지시합니다.

예시:

scp -r /home/vboxuser/Desktop [email protected]:/Users/abhishekvarma/Desktop

여기서는 파일을 복사할 전체 디렉토리를 지정했습니다.

결과:

sample.zip                                         100%   20KB    1.0MB/s   00:00
Screenshot from 2023-08-13 21-45-23.png            100%   27KB    1.5MB/s   00:00
.swp                                               100%   12KB  894.2KB/s   00:00
.help.swp                                          100%   12KB  780.4KB/s   00:00

#4. 패턴과 일치하는 파일 복사

scp /path/to/local/*.txt user@remotehost:/path/to/destination/

*.txt는 지정된 로컬 디렉토리에서 .txt 확장자를 가진 모든 파일과 일치하는 와일드카드 패턴입니다. 소스와 대상 경로는 이전과 같습니다.

예시:

scp /home/vboxuser/Desktop/locfolder/*.png [email protected]:/Users/abhishekvarma/Desktop

결과:

여기서는 .png 확장자를 가진 파일들을 시도했습니다.

Screenshot from 2023-08-13 21-45-23.png            100%   27KB    1.4MB/s   00:00
Screenshot from 2023-08-13 21-55-28.png            100%   24KB    1.7MB/s   00:00
Screenshot from 2023-08-13 22-04-03.png            100%   38KB    2.1MB/s   00:00

#5. 파일 속성 유지

scp -p /path/to/local/file.txt user@remotehost:/path/to/destination/

여기서 '-p' 플래그는 소스 파일의 수정 시간, 액세스 시간 및 모드를 복사할 때 유지합니다.

예시:

scp -p /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

결과:

sample.zip                                         100%   20KB    420.0KB/s   00:00

#6. 다른 SSH 포트 지정

scp -P 22 /path/to/local/file.txt user@remotehost:/path/to/destination/

'-P' 플래그는 SCP 연결에 다른 SSH 포트(이 경우 22)를 지정합니다. 원하는 포트를 사용할 수 있습니다.

예시:

scp -P 22 /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

결과:

sample.zip                                         100%   20KB    1.2MB/s   00:00

#7. 압축하여 복사

scp -C /path/to/local/file.txt user@remotehost:/path/to/destination/

이 '-C' 플래그는 전송 중에 압축을 활성화하여 전송된 데이터 크기를 줄입니다. 소스와 대상 주소는 앞에서 설명한 것과 동일합니다.

예시:

scp -C /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

결과:

sample.zip                                         100%   20KB    985.8KB/s   00:00

#8. 디버깅을 위한 상세 출력

scp -v /path/to/local/file.txt user@remotehost:/path/to/destination/

이 '-v' 옵션은 전송 프로세스 중에 자세한 정보를 제공하는 상세 출력을 활성화합니다.

예시:

scp -v /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

결과:

샘플 출력은 다음과 같습니다:

Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -t /Users/abhishekvarma/Desktop OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established.
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1

#9. 상세 출력을 사용하여 원격에서 로컬로 복사

scp -v user@remotehost:/path/to/remote/file.txt /path/to/local/destination/

로컬 및 원격 위치의 역할이 뒤바뀐 이전의 자세한 예시와 동일한 설명입니다.

예시:

scp -v [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop

결과:

출력은 다음과 같습니다:

Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -f /Users/abhishekvarma/Desktop/sample.zip OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established.
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1

#10. 다른 SSH 키를 사용하여 복사

scp -i /path/to/private_key.pem /path/to/local/file.txt user@remotehost:/path/to/destination/

"-i /path/to/private_key.pem" 플래그는 인증을 위해 다른 SSH 개인 키를 지정합니다.

예시:

scp -i /path/to/private_key.pem /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

결과:

개인 키가 있으면 해당 키를 사용하거나 기본 키를 사용할 수 있습니다.

sample.zip                                         100%   20KB    1.1MB/s   00:00

#11. 원격 서버에 여러 파일 복사

scp file1.txt file2.txt user@remotehost:/path/to/destination/

이 명령은 로컬 디렉토리에서 file1.txt 및 file2.txt를 원격 서버의 지정된 대상으로 복사합니다.

예시:

scp  /home/vboxuser/Desktop/image.png  /home/vboxuser/Desktop/sample.zip  [email protected]:/Users/abhishekvarma/Desktop 

결과:

image.png                                          100%   39KB    1.4MB/s   00:00
sample.zip                                         100%   20KB    1.5MB/s   00:00

#12. 다른 이름으로 원격 파일 복사

scp user@remotehost:/path/to/remote/file.txt /path/to/local/newfilename.txt

이 명령은 file.txt를 원격 서버에서 로컬 디렉토리로 복사하고, 복사 과정에서 이름을 newfilename.txt로 변경합니다.

예시:

scp [email protected]:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop/newfile.zip

결과:

이 명령을 실행하는 동안 이전 파일과 새 파일의 확장자는 동일해야 합니다.

sample.zip                                         100%   20KB    28.7KB/s   00:00

#13. 특정 대역폭 제한으로 복사

scp -l 1000 /path/to/local/file.txt user@remotehost:/path/to/destination/

이 '-l' 플래그는 전송에 대한 대역폭 제한을 Kbps 단위로 지정합니다(이 경우 1000 Kbps).

예시:

scp -l 300 /home/vboxuser/Desktop/sample.zip [email protected]:/Users/abhishekvarma/Desktop

결과:

sample.zip                                         100%   20KB    31.3KB/s   00:00

#14. 파일 복사 및 심볼릭 링크 유지

scp -rp /path/to/local/source/ user@remotehost:/path/to/destination/

'-p' 플래그는 파일 속성을 유지하고, '-r' 플래그는 디렉토리를 재귀적으로 복사합니다. 이 명령어는 복사 과정에서 심볼릭 링크도 유지합니다.

예시:

scp -rp /home/vboxuser/Desktop/image.png [email protected]:/Users/abhishekvarma/Desktop

결과:

image.png                                        100%   39KB    1.8MB/s   00:00

#15. 압축을 사용하여 파일을 상세하게 복사

scp -vC /path/to/local/file.txt user@remotehost:/path/to/destination/

이 명령은 파일 전송 중에 상세 출력(-v)과 압축(-C)을 결합합니다.

예시:

scp -vC /home/vboxuser/Desktop/image.png [email protected]:/Users/abhishekvarma/Desktop

결과:

출력은 다음과 같습니다:

scp: debug1: fd 3 clearing O_NONBLOCK
Sending file modes: C0664 40050 image.png
Sink: C0664 40050 image.png
image.png
d 6 clearing O_NONBLOCK
scp: debug1: fd • clearing O_NONBLOCK
image.png
debug1: client_input_channel_req: channel ✪ type exit-status reply debug1: channel 0: free: client-session, channels 1
Transferred: sent 40220, received 2576 bytes, in 0.1 seconds
Bytes per second: sent 352570.0, received 22581.3
root@ubuntu: ~
debug1: Exit status 0
debug1: compress outgoing: raw data 40287, compressed 38198, factor 0.95 debug1: compress incoming: raw data 792, compressed 757, factor 0.96 

#16. 두 원격 서버 간 복사

하나의 원격 서버에서 다른 원격 서버로 파일을 전송하기 위해 이 명령을 사용할 수 있습니다.

scp user1@remotehost1:/path/to/remote/file.txt user2@remotehost2:/path/to/destination/

이 명령어는 remotehost1에서 remotehost2로 직접 file.txt를 전송합니다.

예시:

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.