Linux에서 scp 명령을 사용하는 방법
게시 됨: 2022-06-28 scp
명령을 사용하면 Linux 컴퓨터 간에 파일을 쉽고 안전하게 복사할 수 있습니다. SSH 보안을 사용하지만 무엇보다 간편합니다. cp
를 사용할 수 있다면 scp
를 사용할 수 있습니다.
보안 복사 프로토콜 및 scp
몇 가지 용어를 정의해 보겠습니다. SCP가 있고 scp
가 있습니다. 대문자 SCP는 보안 복사 프로토콜을 나타냅니다. 소문자 scp
는 secure cp
를 나타냅니다. 즉, SCP는 프로토콜이고 scp
는 프로그램입니다.
scp
는 원격 Linux 컴퓨터 간에 파일을 복사하는 안전하고 안전한 수단으로 설계되었습니다. SSH를 사용하여 보안 연결을 설정합니다. SSH 또는 보안 셸은 원격 Linux 컴퓨터에 액세스하고 로그인하는 데 자주 사용되는 암호화 네트워크 프로토콜입니다. Linux 배포에서 SSH 기능은 OpenSSH에 의해 제공됩니다.
SCP는 이빨이 다소 길며 현재 사용에 대한 우려가 제기되고 있습니다. OpenSSH 버전 8.8부터 SCP는 더 이상 사용되지 않는 것으로 간주되었습니다. scp
의 최신 구현은 기본적으로 보안 파일 전송 프로토콜을 사용하도록 기본 설정되어 있습니다. SSH는 여전히 보안 연결에 사용되지만 파일 전송은 SFTP에 의해 처리됩니다. 이것은 모두 보이지 않고 내부에서 마술처럼 발생하며 scp
구문은 동일하게 유지되었습니다.
rsync
프로그램은 scp
보다 선호되지만 rsync
가 설치되어 있지 않고 루트 권한이 없어서 설치할 수 없는 컴퓨터가 있을 수 있습니다. 자체 포함 네트워크의 컴퓨터에서 컴퓨터로 파일을 복사하는 경우 scp
가 완벽합니다. scp
가 작동하려면 복사할 모든 컴퓨터에서 SSH가 실행되고 있어야 합니다.
컴퓨터에 설치된 OpenSSH 버전을 보려면 다음을 입력하십시오.
SSH -V
단일 파일 복사
표준 cp
명령과 마찬가지로 scp
는 원본 위치에서 대상 위치로 파일을 복사합니다. 원격 컴퓨터에 파일을 복사하려면 원격 컴퓨터의 IP 주소 또는 네트워크 이름을 알아야 합니다. 또한 파일을 보내는 위치에 대한 쓰기 권한이 있는 사용자 계정에 대한 자격 증명이 있어야 합니다.
"sample.txt"라는 파일을 로컬 네트워크의 "fedora-34"라는 컴퓨터로 보내기 위한 구문은 다음과 같습니다.
scp ./sample.txt [email protected]:/home/dave/Downloads/
명령은 다음으로 구성됩니다.
- scp : scp 명령
- ./sample.txt : 보낼 파일입니다. 이것은 현재 디렉토리에 있습니다.
- dave@ : 파일을 보낼 원격 컴퓨터의 사용자 계정.
- fedora-34.local : 원격 컴퓨터의 네트워크 이름입니다.
- :/home/dave/Downloads/ : 원격 컴퓨터에서 파일을 복사할 위치입니다. 컴퓨터 이름과 경로를 구분하는 콜론 ":"에 유의하십시오.
원격 컴퓨터의 계정에 대한 암호를 입력하라는 메시지가 표시되면 파일이 복사됩니다.
파일이 원격 컴퓨터에서 다른 이름을 갖도록 하려면 대상 경로에 파일 이름을 추가할 수 있습니다. 동일한 파일을 복사하고 이름을 "different-file.txt"로 지정하려면 다음 구문을 사용하십시오.
scp ./sample.txt [email protected]:/home/dave/Downloads/different-file.txt
scp
명령은 기존 파일을 자동으로 덮어쓰므로 파일을 복사할 때 주의하십시오. 복사 중인 파일과 동일한 이름을 가진 파일이 대상 컴퓨터에 이미 있는 경우 덮어쓰여지고 손실됩니다.
대상 컴퓨터가 기본 SSH 포트 22를 사용하지 않는 경우 -P
(포트 번호) 옵션을 사용하여 적절한 포트 번호를 제공할 수 있습니다.
단일 파일 검색
원격 서버에서 파일 을 복사하려면 원격 서버를 소스로 두고 파일을 복사할 로컬 경로를 대상으로 두기만 하면 됩니다. 우리는 "development-plan.md"라는 파일을 원격 컴퓨터에서 로컬 컴퓨터의 현재 디렉토리로 복사할 것입니다.
scp [email protected]:/home/dave/Downloads/development-plan.md .
로컬 경로에 파일 이름을 추가하면 파일이 복사되어 해당 이름이 지정됩니다.
scp [email protected]:/home/dave/Downloads/development-plan.md ./dp-1.md
파일이 복사되지만 지정된 파일 이름으로 이름이 바뀝니다.
ls -hl *.md
여러 파일 복사
양방향으로 여러 파일을 복사하는 것은 쉽습니다. 원하는 만큼 소스 파일을 나열할 수 있습니다. 여기에서는 두 개의 마크다운 파일과 CSV 파일을 복사합니다.
scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/home/dave/Downloads/
세 개의 파일이 원격 컴퓨터에 복사됩니다. 와일드카드를 사용할 수도 있습니다. 이 명령은 마지막 명령과 정확히 동일한 작업을 수행합니다.
scp ./dp . [email protected]:/home/dave/Downloads/
재귀적으로 디렉토리 복사
-r
(재귀) 옵션을 사용하면 단일 명령으로 전체 디렉토리 트리를 복사할 수 있습니다. "data"라는 디렉토리에 두 개의 파일을 배치하고 "data" 디렉토리 안에 "CSV"라는 디렉토리를 생성했습니다. "data/CSV" 디렉토리에 CSV 파일을 배치했습니다.
이 명령은 파일을 복사하고 원격 컴퓨터의 디렉터리 구조를 다시 만듭니다.
scp -r ./data [email protected]:/home/dave/Downloads/
원격 서버 간 파일 복사
한 원격 서버에서 다른 원격 서버로 파일을 복사하도록 scp
에 지시할 수도 있습니다. 구문은 매우 간단합니다. 원본 서버의 계정 이름과 네트워크 주소와 대상 서버의 계정 이름과 네트워크 주소를 제공합니다. 파일이 원본 서버에서 복사되어 대상 서버의 위치로 복사됩니다.
구문은 간단하지만 다른 모든 것이 제자리에 있는지 확인하려면 조금 더 생각해야 합니다. 분명히 원격 서버에서 파일을 복사하려는 위치는 명령줄에서 지정한 사용자 계정으로 액세스할 수 있어야 합니다. 그리고 해당 사용자 계정에는 해당 위치에 대한 쓰기 권한이 있어야 합니다.
더 미묘한 전제 조건은 SSH 액세스가 로컬 컴퓨터와 원본 컴퓨터 사이, 그리고 원본 서버와 대상 서버 간에 설정되어야 한다는 것입니다. SSH를 사용 하여 소스 서버에서 대상 서버에 로그인할 수 있는지 확인하십시오. 그렇게 할 수 없으면 scp
가 연결할 수 없습니다.
인증되었지만 암호가 없는 액세스를 사용할 수 있도록 SSH 키를 설정하는 것이 가장 선호되는 방법입니다. 암호를 사용하면 매우 빠르게 복잡해지고 각 사용자 계정에 대한 암호를 묻는 메시지가 표시되기 때문에 스크립트를 사용하여 프로세스를 완전히 자동화할 수 없습니다.
각 원격 서버에서 사용 중인 사용자 계정에 대한 SSH 키를 설정합니다. 이것은 두 사용자에게 다른 서버에 대한 원활한 SSH 액세스를 제공했습니다. 이를 통해 두 사용자 계정을 사용하여 양방향으로 파일을 전송할 수 있습니다.
로컬 Ubuntu 컴퓨터에서 발행된 scp
명령을 통해 Manjaro 컴퓨터의 "davem" 사용자 계정에서 Fedora 컴퓨터의 "dave" 계정으로 파일을 복사하려면 구문은 다음과 같습니다.
scp [email protected]:/home/davem/man . [email protected]:/home/dave/
우리는 자동으로 명령줄로 돌아갑니다. 아무 일도 없었다는 표시가 없습니다. 소식이 없다는 전제 하에 작업하면서 scp
는 이 원격에서 원격 복사에 대한 오류에 대해서만 보고합니다. Fedora 컴퓨터를 확인하면 Manjaro 컴퓨터에서 파일이 복사 및 수신되었음을 알 수 있습니다.
기본적으로 파일은 원본 컴퓨터에서 대상 컴퓨터로 직접 복사됩니다. -3
(3방향) 옵션을 사용하여 이를 무시할 수 있습니다.
이 옵션을 사용하면 파일이 로컬 컴퓨터를 통해 대상에서 소스로 전송됩니다. 그렇게 하려면 로컬 컴퓨터에서 대상 컴퓨터로 원활한 SSH 액세스가 필요합니다.
scp -3 [email protected]:/home/davem/man . [email protected]:/home/dave/
로컬 컴퓨터를 통해 파일을 채널링하는 경우에도 여전히 아무 일도 일어나지 않았다는 표시가 없습니다. 푸딩의 증거는 물론 대상 컴퓨터를 확인하는 것입니다.
다른 옵션
-p
(파일 속성 유지)는 원본 파일 생성, 소유권 및 전송된 파일에 대한 액세스 플래그를 유지합니다. 원본 컴퓨터의 원본 파일과 동일한 메타데이터를 갖게 됩니다.
오류 메시지가 표시되면 명령을 반복하고 -v
(verbose) 플래그를 사용하여 전송 시도에 대한 자세한 정보를 확인하십시오. 출력에서 실패 지점을 찾을 수 있어야 합니다.
-C
(압축) 옵션은 파일을 복사할 때 압축하고 파일을 받으면 압축을 풉니다. 이것은 컴퓨터 간의 느린 모뎀 통신 시대로 거슬러 올라가는 것입니다. 페이로드의 크기를 줄이면 전송 시간을 줄일 수 있습니다.
요즘에는 파일을 압축하고 압축 해제하는 데 걸리는 시간이 압축된 전송과 압축되지 않은 전송의 차이보다 더 오래 걸릴 가능성이 높습니다. 그러나 scp
는 동일한 LAN에 있는 컴퓨터 간에 파일을 복사하는 데 가장 잘 사용되기 때문에 전송 속도는 크게 문제가 되지 않습니다.
관련: rsync를 사용하여 Linux 시스템을 백업하는 방법