리눅스에서 SCP를 사용하여 파일을 안전하게 전송하는 방법

원격 리눅스 서버에 파일을 전송할 때 몇 가지 옵션이 있습니다. 가장 좋은 방법 중 하나는 SSH 프로토콜을 통해 네트워크를 통해 원격 시스템으로 파일을 빠르게 전송하는 Secure Copy 또는 SCP라는 프로그램을 사용하는 것입니다. 이 튜토리얼에서는 리눅스에서 SCP를 사용하여 파일을 안전하게 전송하는 방법을 보여줍니다.
목차
- SSH 구성
- SSH를 통한 시스템 연결
- SCP를 사용하여 파일 전송
- SCP에서 파일 전송 압축
- SCP로 데이터 전송 최적화
- SCP에서 대역폭 사용 제한
- SCP로 원격 간 전송
- SCP와 프록시 사용
- SCP에서 기본 포트 변경
- SCP 조용한 모드 사용
- 자주 묻는 질문
SSH 구성
원격 서버에서 SSH 서버를 설치해야 합니다. 리눅스에서 가장 일반적인 것은 OpenSSH 서버입니다. 설치하려면 다음 명령 중 하나를 실행하세요:
# Debian/Ubuntu 기반 서버
sudo apt install ssh
# 페도라
sudo dnf install openssh
배포판에 따라 소프트웨어 방화벽에서 SSH를 허용해야 할 수도 있습니다. Ubuntu에서는 이 문제가 없지만 Fedora에서는 다음 명령도 실행해야 합니다:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
SSH를 통한 시스템 연결
SSH를 통해 연결하기 전에 원격 서버의 IP 주소를 찾아야 합니다. 그래픽 서버에서는 시스템 설정의 네트워크 애플릿에서 IP 주소가 표시됩니다. 대부분의 서버에서는 터미널에서 ip 명령을 사용해야 합니다.
ip addr
출력에서 inet으로 시작하는 줄을 찾으세요. ethX 또는 enpXsy 아래에 있으며, 이는 네트워크 인터페이스가 시스템에 연결되는 방식에 따라 다릅니다. 제 경우는 192.168.68.108입니다.
SSH 연결을 테스트하려면 다른 리눅스 머신으로 이동하여 입력하세요:
“user”는 서버의 실제 사용자 이름으로 변경하세요.

해당 계정의 비밀번호를 입력하면 연결이 완료됩니다. “host의 진정성을 확인할 수 없습니다.”라는 질문이 나오면 “yes”라고 대답하세요. 이는 실제 서버에 연결하고 있음을 확인하기 위한 보안 점검입니다. 클라이언트 시스템에서 서버에 직접 로그인할 때와 동일한 프롬프트가 나타나면 연결이 성공한 것입니다. 다음 단계로 진행하기 전에 SSH 연결을 최대 보안으로 구성하거나 이중 인증을 설정해야 합니다.
SCP를 사용하여 파일 전송
SSH 연결을 테스트한 후 두 머신 간에 파일을 복사하기 시작하세요. 안전한 복사는 scp 명령을 사용하여 이루어집니다. scp 명령의 기본 형식은 다음과 같습니다:
scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION예를 들어, 로컬 머신에서 원격 서버의 IP 주소가 192.168.68.165인 사용자 “ramces”의 홈 디렉토리의 “backups” 폴더로 “backup.tar.gz” 파일을 복사하려면 다음을 사용하세요:
scp backup.tar.gz [email protected]:~/backups/
ssh를 사용할 때와 마찬가지로 비밀번호를 입력하라는 메시지가 표시됩니다. 사용자 이름은 명령에서 지정했기 때문에 묻지 않습니다.
다음과 같은 와일드카드를 사용할 수도 있습니다:
scp *.tar.gz [email protected]:~/backups/
원격 서버에서 로컬 머신으로 파일을 복사하려면 매개변수를 반대로 하면 됩니다:
scp [email protected]:~/backups/backup.tar.gz ./
명령의 끝에 있는 점을 주목하세요? 이것은 “현재 디렉토리”를 의미합니다. 표준 cp 또는 mv 명령과 동일하게 다른 디렉토리를 지정할 수도 있습니다.
scp -r [email protected]:~/backups/ backups-from-server/와일드카드도 동일하게 사용할 수 있습니다:
scp [email protected]:~/backups/*.txz ./디렉토리를 원격 서버로 재귀적으로 복사하려면 -r 옵션을 사용하세요:
scp -r backups/ [email protected]:~/backups/
원격 서버에서 로컬 머신으로 디렉토리를 재귀적으로 복사하려면 다음을 사용하세요:
scp -r [email protected]:~/backups/ ./
SCP에서 파일 전송 압축
기본 복사 외에도 SCP가 파일 전송 중에 작동하는 방식을 수정할 수 있습니다. 예를 들어, -C 플래그를 사용하여 SCP가 원격 클라이언트에 전송하는 데이터를 압축할 수 있습니다:
scp -C backup.tar.gz [email protected]:/home/ramces/이 옵션은 SCP 프로그램을 통해 전송되는 각 데이터 패킷을 압축하여 작동합니다. 특히 대역폭이 제한된 연결에서 파일을 안전하게 전송해야 할 때 매우 유용합니다.

위의 옵션과 유사하게, -C 옵션을 -r 플래그와 함께 사용하여 원격 머신에 파일을 재귀적으로 압축하여 전송할 수 있습니다. 예를 들어, 다음 명령은 제 원격 서버에서 “backup.tar.gz” 파일을 압축 후 가져옵니다:
scp -Cr [email protected]:/home/ramces/backups /home/ramces/
SCP로 데이터 전송 최적화
대부분의 경우, SCP는 모든 파일 전송에 대해 AES-128 암호화 알고리즘을 사용하려고 합니다. 그러나 특정 파일을 전송하는 데 이 알고리즘이 적합하지 않은 경우가 있습니다.
이러한 점을 고려할 때, 특정 전송을 위해 암호 알고리즘을 직접 변경하여 SCP를 더욱 최적화하고 안전하게 만들 수 있습니다. 이렇게 하려면 -c 플래그를 사용하고 사용하고자 하는 암호를 지정해야 합니다.
예를 들어, 다음 명령은 AES-256을 사용하여 원격 서버에 “backup.tar.gz” 파일을 전송합니다:
scp -c aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/
또한 -c 옵션을 사용하여 특정 파일 전송에 대해 사용하고 싶은 암호 목록을 제공할 수 있습니다. 예를 들어, 다음 명령은 AES-192 및 AES-256을 사용하여 “backup.tar.gz” 파일을 원격 서버로 전송합니다:
scp -c aes192-ctr,aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/
SCP에서 대역폭 사용 제한
파일 패킷 압축은 열악한 네트워크 환경에서 SCP를 사용할 수 있지만, 전송 중 프로그램이 사용하는 대역폭을 제한할 수도 있습니다. 이는 미터링된 연결을 사용하고 있고 SCP가 네트워크 대역폭을 지배하지 않도록 하려는 경우에 유용합니다.
프로그램의 유효 대역폭을 제한하려면 -l 플래그를 사용하고 원하는 상한 값을 킬로비트 per 초(Kb/s)로 지정해야 합니다. 예를 들어, 다음 명령은 “backup.tar.gz” 파일을 1,600 Kb/s의 유효 대역폭으로 원격 서버에 전송합니다:
scp -l 1600 ./backup.tar.gz [email protected]:/home/ramces/
SCP로 원격 간 전송
로컬 파일을 원격 서버로 복사하는 것 외에도, SCP를 사용하여 로컬 머신에서 여러 원격 서버를 관리할 수도 있습니다. SCP는 파일 전송만 처리하며 로컬과 원격 머신을 구분하지 않습니다.
두 원격 서버 간에 전송하려면 각 머신의 사용자 이름과 주소를 명시적으로 지정해야 합니다. 예를 들어, 다음 명령은 원격 서버 간에 “remote-backup.tar.gz” 파일을 전송합니다:
scp [email protected]:/home/ramces/remote-backup.tar.gz [email protected]:/home/ramces/
SCP와 프록시 사용
기본적으로 SCP는 서로 다른 호스트 간에 파일을 전송할 때 로컬 머신의 IP 주소를 사용합니다. 이는 일반적인 상황에서 괜찮지만, 로컬 네트워크가 SCP 활동을 제한하는 경우에는 문제가 될 수 있습니다. 이 문제를 해결하는 방법 중 하나는 SSH 프록시를 통해 로컬 연결을 전달하는 것입니다.
이를 위해서는 -o 플래그를 사용하고 ProxyCommand 옵션을 이어서 사용할 수 있습니다. 이것은 새 머신에 대한 기본 SSH 연결을 생성하여 SCP 명령을 실행합니다. 예를 들어, 다음 명령을 실행하면 원격 머신과 새 SSH 프록시를 생성하고 “backup.tar.gz” 파일을 전송합니다:
scp -o "ProxyCommand ssh [email protected] nc %h %p" ./backup.tar.gz [email protected]:/home/ramces/
SCP에서 기본 포트 변경
기본 SSH 프록시를 생성하는 것 외에도, SCP의 기본 포트를 변경할 수도 있습니다. 이는 리눅스 서버를 보호하는 데 도움이 되며 기본 포트를 노출시키지 않으려는 경우에 유용합니다.
SCP를 다른 포트로 사용하려면 -P 플래그를 사용하고 사용하고자 하는 포트 번호를 지정해야 합니다. 예를 들어, 다음 명령은 “backup” 디렉토리를 재귀적으로 복사하고 포트 2222를 사용하여 원격 서버에 연결합니다:
scp -r -P 2222 ./backup [email protected]:/home/ramces/
SCP 조용한 모드 사용
마지막으로, SCP 명령의 모든 터미널 출력을 완전히 제거하는 것도 가능합니다. 이는 비대화형 스크립트를 만들어 머신에서 실행하려는 경우에 특히 유용합니다. 또한 이 과정을 완전히 자동화하여 cronjob을 생성하고 SSH 개인 키를 서버로 전송함으로써 실현할 수 있습니다.
조용한 SCP 전송을 생성하려면 -q 플래그를 사용해야 합니다. 예를 들어, 다음 명령은 “backup.tar.gz” 파일을 조용히 원격 서버로 전송합니다:
scp -q ./backup.tar.gz [email protected]:/home/ramces/
자주 묻는 질문
SCP로 원격 간 전송이 작동하지 않습니다. 어떻게 고칠 수 있나요?
이 문제는 원격 머신 중 하나의 구성 파일에서 차단된 포트 때문일 가능성이 높습니다. 이 문제를 해결하려면 두 머신 모두에서 SSH의 기본 포트가 열려 있는지 확인하세요.
이 문제는 원격 머신 중 하나가 CG-NAT 연결 뒤에 있을 때도 발생할 수 있습니다. 이 경우 외부에서 원격 머신으로의 연결이 제대로 해결되지 않습니다. 이를 해결하려면 Yggdrasil과 같은 가상 LAN 프로그램을 사용하여 CG-NAT를 뚫어야 합니다.
SCP 프록시를 실행했는데 원격 호스트가 연결을 닫았습니다. 어떻게 해야 하나요?
이 문제는 프록시 머신에 문제가 있을 가능성이 높습니다. SSH 프록시를 올바르게 시작하려면 사용하고자 하는 머신에 OpenSSH 서버와 netcat이 설치되어 있는지 확인하세요. 이를 Ubuntu에 설치하려면 다음 명령을 실행하세요: sudo apt install ssh netcat.
SCP에서 사용 가능한 모든 암호를 알 수 있나요?
기본적으로 SCP 프로그램은 암호화 기능을 위해 SSH 프로토콜에 많이 의존합니다. 따라서 SSH 프로그램을 사용하여 SCP와 함께 사용할 수 있는 암호 목록을 인쇄할 수 있습니다. 예를 들어, ssh -Q ciphers를 실행하면 머신에서 사용 가능한 암호의 간략한 목록을 출력합니다.
이미지 출처: Unsplash. 모든 변경 사항 및 스크린샷은 Ramces Red에 의해 작성되었습니다.