리눅스 서버에 접속하는 방법은 여러 가지가 있습니다. 그래픽 인터페이스가 있는 서버라면 VNC를 사용할 수 있지만, 보다 일반적인 방식은 SSH(Secure Shell)를 통해 헤드리스 서버에 로그인하는 것입니다. SSH는 암호화된 보안 프로토콜로, SSH 클라이언트를 통해 원격 시스템에 안전하게 접근할 수 있게 해줍니다. 하지만 단순히 서버로 파일만 전송하고 싶은 경우도 있습니다. 이럴 때 유용한 것이 바로 SCP(Secure Copy)입니다. SCP는 오랫동안 검증된 SSH 프로토콜 위에서 동작하며, 네트워크를 통해 원격 시스템으로 빠르고 안전하게 파일을 전송할 수 있습니다. 이번 글에서는 리눅스에서 SCP를 사용해 파일을 안전하게 전송하는 방법을 단계별로 알아보겠습니다.
SSH 설정하기
먼저 서버(또는 접속하려는 원격 시스템)에 SSH 서버가 설치되어 있어야 합니다. 리눅스에서 가장 널리 사용되는 것은 OpenSSH 서버입니다. 아래 명령어 중 해당 배포판에 맞는 것을 실행해 설치하세요.
# Debian/Ubuntu 기반 서버 sudo apt install openssh-server # Fedora/CentOS sudo dnf install openssh-server
배포판에 따라 소프트웨어 방화벽에서 SSH를 허용해야 할 수도 있습니다. 우분투(Ubuntu)에서는 이런 문제가 없지만, CentOS에서는 다음 명령어를 추가로 실행해야 합니다.
sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload
서버 준비가 끝났다면 이제 클라이언트 쪽에 SSH 클라이언트가 필요합니다. 대부분의 배포판에는 OpenSSH 클라이언트가 기본으로 설치되어 있지만, 만약 없다면 다음 명령어로 설치하세요.
# Debian/Ubuntu 기반 배포판 sudo apt install openssh-client # Fedora sudo dnf install openssh-client
SSH로 시스템에 연결하기
SCP를 본격적으로 사용하기 전에 SSH가 정상적으로 작동하는지 먼저 확인하는 것이 좋습니다. SSH로 연결하려면 서버의 IP 주소를 알아야 합니다. 그래픽 환경이 있는 서버라면 시스템 설정의 네트워크 애플릿에서 IP 주소를 확인할 수 있으며, 대부분의 서버에서는 터미널에서 ip 명령어를 사용하는 것이 편리합니다.
ip a s
출력 결과에서 네트워크 인터페이스 연결 방식에 따라 eth0 또는 enp1s0 항목 아래에 있는 inet으로 시작하는 줄을 찾으세요. 필자의 경우 192.168.122.201입니다.
SSH 연결을 테스트하려면 리눅스 클라이언트 머신에서 다음과 같이 입력합니다.
ssh user@192.168.122.201
여기서 "user" 부분은 서버의 실제 사용자 이름으로 바꿔야 합니다.
해당 계정의 비밀번호를 입력하면 로그인이 완료됩니다. "호스트의 진위 여부를 확인할 수 없습니다(authenticity of host can't be established)"라는 질문이 나오면 "yes"라고 답하면 됩니다. 이는 실제 서버에 접속하는지, 가짜 서버는 아닌지 확인하기 위한 보안 절차입니다. 클라이언트 시스템에서 서버에 직접 로그인했을 때와 동일한 프롬프트가 나타난다면 연결이 성공한 것입니다. 다음 단계로 넘어가기 전에 SSH 연결을 최대한 안전하게 설정해 두는 것도 잊지 마세요.
SCP로 파일 전송하기
SSH 연결 테스트가 끝났다면 이제 두 머신 사이에서 파일을 복사할 수 있습니다. 파일 전송은 scp 명령어로 수행하며, 기본 형식은 다음과 같습니다.
scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION
예를 들어, 로컬 머신의 "backup.txz" 파일을 IP 주소가 192.168.122.201인 원격 서버에 있는 "maketecheasier" 사용자 홈 디렉터리의 "backups" 폴더로 복사하려면 다음과 같이 입력합니다.
scp backup.txz maketecheasier@192.168.122.201:~/backups/
ssh로 접속할 때와 마찬가지로 비밀번호를 묻는 프롬프트가 나타납니다. 사용자 이름은 명령어에 이미 지정되어 있으므로 다시 입력할 필요가 없습니다.
와일드카드(wildcard)를 활용하면 여러 파일을 한 번에 전송할 수도 있습니다.
scp *.txz maketecheasier@192.168.122.201:~/backups/
반대로 원격 서버에서 로컬 머신으로 파일을 가져오려면 매개변수 순서만 바꾸면 됩니다.
scp maketecheasier@192.168.122.201:~/backups/backup.txz .
명령어 끝의 마침표(.)는 표준 cp나 mv 명령어와 마찬가지로 "현재 디렉터리"를 의미합니다. 물론 원하는 다른 디렉터리를 지정할 수도 있습니다.
scp -r maketecheasier@192.168.122.201:~/backups/ backups-from-server/
와일드카드를 함께 사용하는 것도 가능합니다.
scp maketecheasier@192.168.122.201:~/backups/*.txz .
디렉터리 전체를 원격 서버로 재귀적으로 복사하려면 -r 옵션을 사용합니다.
scp -r backups/ maketecheasier@192.168.122.201:~/backups/
원격 서버의 디렉터리를 로컬 머신으로 재귀적으로 복사하려면 다음과 같이 입력합니다.
scp -r maketecheasier@192.168.122.201:~/backups/ .
추가로 활용할 만한 SCP 옵션
좀 더 깊이 들어가고 싶다면 -C 옵션(복사 중 데이터 압축 활성화)과 -l 옵션(복사 중 대역폭 제한)을 실험해 보세요. 대용량 파일을 전송하거나 네트워크 대역폭이 제한적인 환경에서 특히 유용합니다.
또한 매번 비밀번호를 입력하는 번거로움을 피하고 싶다면, 서버에 접속할 때 사용할 개인 SSH 키를 생성해 두는 방법도 있습니다. SSH 키 기반 인증을 설정하면 더욱 빠르고 안전하게 파일을 전송할 수 있습니다.