scp 명령을 사용하여 Linux에서 파일을 안전하게 전송하는 방법

리눅스 시스템 환경에서 서버 간 파일 전송이 필요할 때, 다양한 방법들이 존재하지만, 보안을 최우선으로 고려한다면 몇 가지 선택지로 좁혀집니다. 가장 효율적인 해결책 중 하나는 scp(보안 복사) 명령을 사용하는 것입니다. 이 명령은 보안 걱정 없이 파일을 전송할 수 있게 해주죠. 이 글에서는 리눅스 시스템에서 scp 명령을 활용하여 안전하게 파일을 전송하는 방법에 대해 자세히 알아보겠습니다.

리눅스(2023) 환경에서 scp 명령으로 파일 전송하기

리눅스에서 scp 명령이란 무엇일까요?

scp 명령은 보안 네트워크를 통해 파일을 전송할 때 매우 유용합니다. Secure Copy Protocol의 약자로, SSH(Secure Shell) 연결을 통해 두 시스템 간에 파일과 디렉토리를 전송합니다. SSH는 기본적으로 파일 내용을 암호화하므로 파일 보안을 신뢰할 수 있습니다. 쉽게 말해 scp 명령은 리눅스 터미널 명령에서 볼 수 있는 cp 명령의 보안 강화 버전이라고 할 수 있습니다.

scp 명령 사용법: 구문 및 옵션

scp를 사용하여 파일을 전송하기 전에, 명령의 구문과 다양한 옵션을 먼저 살펴봅시다.

scp <옵션> <[email protected]_ip_address:소스/파일/경로> <[email protected]_ip_address:대상/경로>

구문 분석:

  • 첫 번째, <[email protected]_ip_address:소스/파일/경로> 는 전송할 파일 또는 디렉토리가 있는 ‘소스’ 시스템을 가리킵니다.
  • 두 번째, <[email protected]_ip_address:대상/경로> 는 파일 또는 디렉토리를 전송할 ‘대상’ 시스템을 지정합니다.

위의 매개변수 중 하나를 생략하면, scp 명령은 먼저 파일을 찾은 다음 해당 파일을 로컬 시스템에 복사합니다. 자주 사용되는 옵션은 다음과 같습니다.

옵션:

-P 호스트 시스템과 연결할 포트를 설정합니다. 생략하면 기본 포트 22를 사용합니다.
-p 대상 시스템으로 복사할 때 원본 파일의 수정 시간, 액세스 시간, 권한 등의 속성을 유지합니다.
-r 디렉토리 전체를 대상 시스템에 재귀적으로 복사합니다.
-J 프록시 시스템(점프 호스트)을 통해 소스 시스템과 대상 시스템에 연결합니다.
-3 이 플래그를 사용하면 파일을 로컬 시스템과 대상 시스템 양쪽에 복사합니다.
-4 scp 명령이 IPv4 주소만 사용하도록 강제합니다.
-6 scp 명령이 IPv6 주소만 사용하도록 강제합니다.

scp 명령을 사용하여 파일 복사하기

리눅스에서 scp 명령을 사용하기 전에, 소스 시스템과 대상 시스템 모두에서 다음 사항을 충족해야 합니다.

  • ssh가 설치되어 있어야 합니다.
  • 루트 액세스 권한 또는 sudo 권한을 가진 사용자가 있어야 합니다.

로컬 호스트에서 원격 대상으로 파일 복사

로컬 시스템에서 원격 대상으로 파일을 전송해야 하는 경우, 다음 구문을 활용합니다.

scp <옵션> <로컬_파일_경로> <원격_사용자>@<원격_대상_IP_주소>:<원격_저장_경로>

복잡해 보일 수 있는 위 구문을 이해하기 쉽게 예시를 들어보겠습니다.

scp test.txt [email protected]:/home/remote2/Documents/

이 예시에서:

  • test.txt는 전송할 파일 이름이며, 로컬 시스템의 현재 디렉토리에 있습니다.
  • test는 대상 시스템의 사용자 이름입니다.
  • 139.144.11.105는 대상 시스템의 IP 주소입니다.
  • /home/remote2/Documents/는 전송된 파일이 저장될 대상 시스템의 위치입니다.

원격 호스트에서 로컬 대상으로 파일 복사

원격 호스트에서 로컬 시스템으로 파일을 전송해야 하는 경우에는, 다음 scp 명령 구문을 사용하세요.

scp <옵션> <원격_사용자>@<원격_호스트_IP_주소>:<전송할_파일_경로> <저장_경로>

예를 들어, 작업 중인 원격 서버에서 test.py라는 파일을 전송해야 한다고 가정하면, 아래 명령을 사용합니다.

scp [email protected]:/home/test/test1.py ~/test1.py

이 예시에서:

  • test는 원격 호스트의 사용자 이름입니다.
  • 10.10.11.113은 원격 호스트의 IP 주소입니다.
  • /home/test/test1.py는 원격 호스트에서 전송할 파일의 경로입니다.
  • ~/test1.py는 파일이 로컬 컴퓨터로 전송되어 홈 디렉토리에 저장된 후의 파일 이름입니다.

한 원격 호스트에서 다른 원격 대상으로 파일 전송

scp 명령은 로컬 시스템과 원격 시스템 간의 파일 전송뿐만 아니라, 두 원격 시스템 사이에서도 파일 전송을 가능하게 합니다. 그러나 한 원격 시스템에서 다른 원격 시스템으로 파일을 전송하기 전에, 소스 시스템에서 개인 ssh 키와 공개 ssh 키를 생성하고, 대상 시스템에 공개 키 사본을 저장하는 것이 좋습니다.

일반적으로, 사용자들은 두 원격 시스템 간 파일 전송 시 “호스트 키 확인 실패” 오류를 경험하곤 합니다. 이 오류를 피하려면 ssh-key를 추가적인 보안 조치로 사용해야 합니다. 아래에서 그 방법을 설명하겠습니다.

1. 다음 명령을 사용하여 원본 서버에서 공개/개인 키 쌍을 생성합니다.

ssh-keygen -t <암호화_알고리즘>

2. 암호화 알고리즘은 가장 일반적으로 사용되는 “rsa”를 사용하거나 다른 알고리즘을 선택할 수 있습니다.

3. ssh 키를 저장할 위치를 선택하라는 메시지가 나타납니다. 원하는 위치나 기본 위치에 저장할 수 있습니다.

4. 암호를 설정하거나 Enter 키를 눌러 비워둘 수 있습니다.

5. 다음 명령을 사용하여 공개 키를 대상 서버에 복사합니다. 이를 통해 ssh를 사용하여 암호 없이 대상 시스템에 로그인할 수 있습니다.

ssh-copy-id <대상_사용자_이름>@<대상_IP_주소>

주의: 암호 없는 로그인 방법은 ssh 키를 생성한 사용자에 대해서만 작동합니다.

6. 원격 서버에 ssh 키를 생성하고 저장했다면, 이 scp 명령 구문을 사용하여 리눅스를 실행하는 두 원격 시스템 간에 파일을 주고받을 수 있습니다.

scp <옵션> <원격_사용자_1>@<원격_호스트_IP_주소>:<전송할_파일_경로> <원격_사용자_2>@<원격_대상_IP_주소>:<원격_저장_경로>

test.txt 파일을 한 원격 호스트에서 다른 원격 수신기로 전송해야 하는 경우, 아래 명령을 사용할 수 있습니다.

scp [email protected]:/home/test1/test.txt [email protected]:/home/remote2/Documents/test1.txt

이 예시에서:

  • remote1은 원격 발신자 호스트의 사용자 이름입니다.
  • 10.10.11.113은 원격 발신자 호스트의 IP 주소입니다.
  • /home/test1/test.txt는 전송할 파일의 경로입니다.
  • remote2는 원격 수신기 대상의 사용자 이름입니다.
  • 10.11.27.111은 원격 수신기 대상의 IP 주소입니다.
  • /home/remote2/Documents/test1.txt는 수신할 파일의 이름과 저장 경로입니다.

scp 명령을 사용하여 여러 파일 전송

여러 파일을 하나씩 전송하는 것은 매우 번거로운 일입니다. 대신, 아래 구문을 사용하여 리눅스에서 scp 명령으로 여러 파일을 한 번에 전송할 수 있습니다.

scp <파일_경로_1> <파일_경로_2> <원격_수신자>@<원격_대상_IP_주소>:<원격_저장_경로>

예를 들어, test1.txt, test2.py, test3.sh, test4.c 파일 총 4개의 파일을 원격 수신기로 보내야 한다고 가정하면, 아래 명령을 사용합니다.

scp -P 22 test1.txt test2.py test3.sh test4.c [email protected]:/home/remote_1/Documents

이 명령이 어떻게 동작하는지 살펴봅시다.

  • -p 2222는 포트 22를 통해 연결하도록 지정합니다.
  • test1.txt test2.py test3.sh test4.c는 전송할 파일들의 이름입니다.
  • remote_1은 수신 시스템의 사용자 이름입니다.
  • 10.10.11.113은 수신자의 IP 주소입니다.
  • /home/remote_1/Documents는 받은 파일을 저장할 경로입니다.

와일드카드를 사용하여 같은 확장자를 가진 여러 파일을 보낼 수도 있습니다.

scp <와일드카드>.<확장자> <원격_수신자>@<원격_대상_IP_주소>:<원격_저장_경로>

예를 들어, 모든 .py 파일을 원격 서버로 보내야 하는 경우, 아래 scp 명령을 리눅스 터미널에서 실행합니다.

scp *.py [email protected]:/home/remote_1/

이 예시에서,

  • *.py는 모든 파이썬 파일을 의미합니다.
  • remote1은 수신자의 사용자 이름입니다.
  • 10.10.11.113은 수신자의 IP 주소입니다.
  • /home/remote_1/은 받은 파일을 저장할 위치입니다.

자주 묻는 질문

SCP 파일 전송은 안전한가요?

Secure Copy Protocol(scp)은 SSH 기술을 기반으로 하며, 두 호스트 간의 파일 교환을 위해 암호화 및 인증을 사용하는 프로토콜입니다. 이를 통해 데이터 보안과 무결성이 보장됩니다.

SCP는 SFTP보다 더 안전한가요?

SCP와 SFTP 프로토콜은 보안 측면에서 동등합니다. scp를 사용하는 주요 장점은 높은 네트워크 대기 시간 환경에서 특히 유용한 빠른 전송 속도입니다.

리눅스에서 scp 명령을 사용하여 안전하게 파일 전송하기

네트워크를 통해 파일 교환이 필요한 상황은 누구나 겪을 수 있습니다. scp 명령을 사용하면 네트워크 환경의 제약 없이 파일을 안전하고 효율적으로 전송할 수 있습니다. 다양한 scp 옵션과 구문을 익히는 것은 이러한 작업에 큰 도움이 될 것입니다. 추가적으로, 리눅스에서 파일 이름을 바꾸거나 삭제하는 방법과 같은 가이드도 참고하여 파일 관리 능력을 향상시킬 수 있습니다. 이 글이 여러분이 scp 명령을 사용하여 리눅스 컴퓨터에서 파일을 안전하게 전송하는 데 도움이 되기를 바랍니다. 명령 사용 중 문제가 발생하면 언제든 의견을 남겨주세요.