[linux] SSH를 이용해 네트워크 파일 전송을 하는 scp 명령어 사용방법
리눅스용으로만 알고 있지만, SSH 원격 접속이 가능하면 운영체제 구분 없이 사용 가능한 커맨드입니다.
윈도우11에도 scp 커맨드가 제공되며, 리눅스와 사용 방법도 동일합니다. 별도의 파일 전송 프로그램이나 서비스 설치 없이 네트워크로 파일 전송을 할 수 있고, SSH 연결을 위한 22번 포트만 개방되어 있으면 되기 때문에 복잡한 방화벽 설정도 필요하지 않습니다.
![](https://apost.dev/content/images/2024/01/image-68.png)
셸 환경을 제공하는 맥OS에서도 같은 커맨드가 있기 때문에 리눅스, 윈도우, 맥OS 상호간에 원격 파일 전송을 할 수 있습니다.
윈도우 운영체제에서는 OpenSSH 클라이언트가 설치되어 있어야 합니다. 윈도우10 이후에는 기본으로 설치되어 있으며, 설치 여부 확인은 설정 > 시스템 > 선택적 기능에서 목록에서 OpenSSH 클라이언트가 있는지 확인하면 됩니다.
![](https://apost.dev/content/images/2024/01/image-70.png)
scp 커맨드
SSH 원격 접속 프로토콜을 사용하는 네트워크 파일 복사 커맨드입니다. SecureCoPy의 줄임말입니다.
한 개 이상의 파일, 또는 폴더 단위로 네트워크를 통해 원격PC로 파일을 복사할 수 있습니다. 계정 기반 인증을 하기 때문에 보안성이 높습니다.
계정 기반의 보안 정책을 사용하기 때문에 해당 계정으로 쓰기 권한이 없는 대상 경로에는 파일 복사를 할 수 없습니다.
scp 명령어로 경로를 표시할 때 앞쪽 경로가 원본이며, 뒤쪽 경로가 복사되는 위치입니다. 복사 방향에 따라 로컬->원격지, 원격지->로컬 방향으로 파일을 복사할 수 있습니다.
scp [옵션] [원본 파일 경로] [복사할 대상 경로]
"원본 파일 경로", 또는 "복사할 대상 경로" 위치에 표시하는 원격지 경로는 "[원격지 사용자 ID]@[원격지IP]:[원격지파일경로] " 포맷으로 표현합니다. @와 :로 구분해서 3가지 항목을 모두 표시해야 합니다.
예를 들어 다음과 같이 scp 커맨드를 작성할 수 있습니다.
- 원격지->로컬: scp ghostdev@192.168.0.10:/var/www/backup.zip /tmp
- 로컬->원격지: scp contentbackup.zip ghostdev@192.168.0.10:/var/www/ghost
scp 커맨드 옵션
주로 사용하는 scp 옵션은 다음과 같습니다.
- -r: 디렉토리 안의 모든 파일과 하위 디렉토리 내용을 복사
- -p: 원본 파일의 권한 속성 유지
- -c: 압축 복사
- -v: 복사 과정 출력
- -a: 아카이브 모드
로컬->원격 전송하기
윈도우 운영체제의 파일을 복사할 때 윈도우 운영체제의 경로는 리눅스와 달리 윈도우 운영체제의 경로를 표시해야 합니다. 하위 디렉토리 경로를 표시할 때는 "/"가 아닌 "\"로 표시합니다.
파일을 복사하려는 원격지 디렉토리가 커맨드라인에 표시한 계정으로 쓰기 권한이 없으면 "Permission denied" 에러가 발생합니다. 원격지 경로는 해당 원격 계정으로 쓰기 가능한 계정이어야 합니다.
scp config.development.json apost@192.168.0.10:/var/www
로컬 위치의 파일이 현재 디렉토리에 있지 않으면 다음처럼 전체 경로를 표시해야 합니다.
scp c:\_data\ghost\config.development.json apost@192.168.0.10:/var/www
파일 복사가 가능하면 계정 패스워드를 확인합니다. 계정 패스워드가 일치하면 파일 전송이 시작되고 전송하는 파일의 전송 정보가 표시됩니다. 파일이 전송되는 동안 전송율, 파일 크기, 전송시간 정보가 표시됩니다.
apost@192.168.0.10's password:
config.development.json 100% 444 89.4KB/s 00:00
PS C:\_DATA\ghost>
복사할 원격 디렉토리가 쓰기 권한이 없는 경우 권한을 바꾸기 보다는 원격 시스템의 계정 루트 홈, 또는 루트 홈 디렉토리 하위 디렉토리에 복사를 한 후 터미널로 접속해서 복사된 파일을 이동하는 방식이 보안상 더 낫습니다.
앞서의 파일 복사 scp 커맨드를 원격 계정의 홈 루트 디렉토리 밑에 있는 tmp 폴더로 복사하려면 다음처럼 수정하면 됩니다. "~/"은 계정의 홈 디렉토리를 가리킵니다.
scp config.development.json apost@192.168.0.10:~/tmp
원격->로컬 전송하기
경로 표시 순서를 바꿔서 복사하는 대상이 로컬 경로가 됩니다.
scp apost@192.168.0.10:~/images/167thumb1.jpg c:\download
여러 개의 파일을 한번에 전송하기
scp 커맨드 사용 방법은 동일하며 전송할 파일을 공백으로 구분해서 순서대로 나열해서 표기하면 됩니다.
scp [옵션] [file1] [file2] [원격지 경로]
파일 전송이 시작되면 파일을 순서대로 전송하면서 파일 전송 정보를 터미널에 표시해줍니다.
PS C:\> scp images/167thumb1.jpg 167thumb2.jpg apost@192.168.0.10:~/images
apost@192.168.0.10's password:
167thumb1.jpg 100% 8231 799.0KB/s 00:00
167thumb2.jpg 100% 5909 1.2MB/s 00:00
PS C:\>
디렉토리 단위로 전송하기
디렉토리 단위로 전송할 때는 -r 옵션(recursive)을 사용합니다. 디렉토리 하위의 모든 파일과 하위 폴더들을 전송합니다. 원격지 경로에는 디렉토리 이름을 표시해야 합니다.
scp -r images apost@192.168.0.10:~/images
원격 시스템에 대상 디렉토리가 없으면 대상 디렉토리와 하위 디렉토리들까지 모두 만들어집니다.
PS C:\_download> scp -r images apost@192.168.0.10:~/images
apost@192.168.0.10's password:
167thumb1.jpg 100% 8231 1.1MB/s 00:00
167thumb10.jpg 100% 8480 1.5MB/s 00:00
167thumb11.jpg 100% 7564 966.9KB/s 00:00
167thumb12.jpg 100% 9243 621.5KB/s 00:00
167thumb2.jpg 100% 5909 1.1MB/s 00:00
167thumb3.jpg 100% 7084 1.1MB/s 00:00
167thumb4.jpg 100% 8757 1.5MB/s 00:00
167thumb5.jpg 100% 4572 892.8KB/s 00:00
167thumb6.jpg 100% 7650 1.3MB/s 00:00
167thumb7.jpg 100% 10KB 2.2MB/s 00:00
167thumb8.jpg 100% 14KB 1.7MB/s 00:00
167thumb9.jpg 100% 20KB 1.9MB/s 00:00
PS C:\_download>
원격지 디렉토리를 가져오려면 디렉토리 표시 순서를 반대로 바꾸면 됩니다.
scp -r apost@192.168.0.10:~/images c:\download\images
윈도우용 GUI scp 클라이언트 WinSCP
커맨드라인으로 사용하는데 불편한 사용자들을 위해 scp 커맨드를 FTP 클라이언트처럼 사용할 수 있도록 윈도우용 무료 프로그램이 있습니다.
FTP 클라이언트, WebDAV, 아마존S3 클라이언트와 scp클라이언트를 지원합니다.
도네이션 기반의 무료 프로그램이고 FTP 클라이언트를 겸하고 있기 때문에 FTP 서버가 없는 원격 시스템에 파일 전송할 필요가 있을 때 유용하게 사용할 수 있습니다.
프로그램이 한글 지원이 충실하고, 웹사이트 내용도 모두 한글을 지원합니다.
FTP 클라이언트인 파일질라가 설치되어있으면 파일질라의 연결 설정 정보를 자동으로 가져옵니다.
![](https://winscp-static-746341.c.cdn77.org/assets/images/logos/logo.png?v=7028)
사용 방법은 일반적인 FTP 프로그램과 유사해서 scp 프로토콜을 사용해 파일을 드래그앤드롭으로 복사할 수 있습니다.
![](https://apost.dev/content/images/2024/01/image-87.png)