SSH를 사용하여 SCP 및 SFTP로 파일을 안전하게 전송하는 방법

SSH를 사용한 안전한 파일 전송 기술을 마스터하십시오. 이 포괄적인 가이드에서는 SCP(Secure Copy Protocol)와 SFTP(SSH File Transfer Protocol)의 차이점, 장단점을 자세히 설명합니다. 로컬-원격 및 원격-로컬 전송 예시를 포함하여 두 방법 모두에 필수적인 명령줄 구문을 학습하세요. 또한 SSH 키 인증 및 사용자 제한과 같은 중요한 보안 모범 사례를 다루어 모든 전송 과정에서 데이터가 암호화되고 보호되도록 보장합니다.

41 조회수

SSH를 사용하여 SCP 및 SFTP로 파일을 안전하게 전송하는 방법

로컬 시스템과 원격 시스템 간에 파일을 전송하는 것은 시스템 관리 및 개발의 근본적인 요구 사항입니다. 그러나 일반 FTP나 R-명령어와 같은 암호화되지 않은 프로토콜을 사용하면 민감한 데이터가 가로채기 및 공격에 노출됩니다. 보안 셸(SSH) 프로토콜은 파일 전송을 위해 두 가지 강력하고 암호화된 방법인 SCP(Secure Copy Protocol)와 SFTP(SSH File Transfer Protocol)를 제공합니다.

이 가이드에서는 SCP와 SFTP가 SSH 암호화를 활용하여 전송 중 데이터 무결성과 기밀성을 보장하는 방법을 자세히 설명합니다. 각 프로토콜의 장단점을 살펴보고 실용적인 명령줄 예제를 제공하며, 안전한 파일 관리를 위한 중요한 보안 모범 사례를 간략하게 설명합니다.

기반 이해하기: SSH

SCP와 SFTP 모두 기본 전송 계층으로 SSH(일반적으로 포트 22에서 실행)를 활용합니다. 두 프로토콜 중 하나를 사용하여 전송을 시작하면 SSH가 클라이언트와 서버 간에 안전하고 암호화된 터널을 먼저 설정합니다. 인증 자격 증명과 파일 내용을 포함한 모든 데이터는 이 터널을 통해 전송되므로 두 방법 모두 기존 파일 전송 프로토콜에 대한 매우 안전한 대안이 됩니다.

SSH 기반이 제공하는 주요 기능:

  • 암호화: 모든 데이터는 종단 간 암호화됩니다.
  • 인증: 암호 인증과 훨씬 더 안전한 공개/개인 키 쌍 인증을 모두 지원합니다.
  • 무결성: 전송 중 파일이 변경되지 않도록 암호화 해싱을 사용합니다.

SCP(Secure Copy Protocol)

SCP는 원격 복사 프로토콜(rcp)을 기반으로 하지만 SSH의 보안 기능으로 래핑된 네트워크 프로토콜입니다. 단순성과 속도를 위해 설계되었으므로 특히 스크립팅이나 자동화에서 빠르고 비대화형 전송에 이상적입니다.

SCP 기능 및 특징

  1. 단순성: 표준 Unix cp 명령어와 매우 유사한 구문을 사용합니다.
  2. 속도: 대화형 승인이나 세션 설정이 필요하지 않고 기본 SSH 터널에만 의존하므로 일반적으로 SFTP보다 빠릅니다.
  3. 비대화형: 시작되면 세션을 관리하거나 전송 상태를 중단할 수 있는 기능 없이 전송이 완료될 때까지 실행됩니다.

실용적인 SCP 명령어

SCP의 일반적인 구문은 scp [옵션] [소스] [대상]입니다.

1. 로컬에서 원격 서버로 파일 복사

로컬 파일을 원격 사용자의 홈 디렉터리로 푸시하려면 다음을 사용합니다.

scp /path/to/local/file.txt user@remote_host:/home/user/destination/

2. 원격에서 로컬 시스템으로 파일 복사

서버에서 현재 디렉터리로 파일을 가져오려면 다음을 사용합니다.

scp user@remote_host:/var/log/system.log . 
# 참고: '.'은 현재 로컬 디렉터리를 나타냅니다.

3. 전체 디렉터리 복사(재귀적)

디렉터리와 모든 내용을 복사하려면 -r(재귀) 플래그를 사용합니다.

scp -r /path/to/local/folder/ user@remote_host:/data/backups/

4. 표준이 아닌 포트 지정

SSH 데몬이 22 이외의 포트에서 실행되는 경우 -P(대문자 P에 유의) 플래그를 사용합니다.

scp -P 2222 local_file.zip user@remote_host:/tmp/

SCP 사용 중단에 대한 참고 사항: SCP는 매우 유용하지만 레거시 프로토콜로 간주됩니다. 파일 이름 조작과 관련하여 SCP 프로토콜 설계에 알려진 취약성 때문에 최신 시스템에서는 SFTP 또는 SSH를 통한 Rsync 사용을 점점 더 권장하고 있습니다.

SFTP(SSH File Transfer Protocol)

SFTP는 파일 관리를 위한 보다 풍부하고 대화형 환경을 제공하는 SSH의 하위 시스템입니다. 순수한 복사 도구인 SCP와 달리 SFTP는 세션 제어, 파일 목록 표시, 삭제, 이름 바꾸기, 디렉터리 생성 등 상세한 작업을 허용하는 상태 저장 프로토콜입니다. 이는 향상된 FTP 세션과 유사하지만 완전히 안전합니다.

SFTP 기능 및 특징

  1. 대화형 세션: 전송은 전용 대화형 셸 세션 내에서 발생합니다.
  2. 견고성: 세션 내에서 개별 전송에 대한 탐색, 재개 및 관리를 지원합니다.
  3. 전체 관리: 세션 명령(put, get, lcd, lmkdir)을 사용하여 원격 및 로컬 파일 목록 표시(ls), 디렉터리 변경(cd), 조작을 허용합니다.
  4. 보안: 매우 안정적이며 최신 보안 파일 전송 표준으로 간주됩니다.

실용적인 SFTP 명령어

1. SFTP 연결 시작

원격 서버에 대한 대화형 세션을 시작합니다.

sftp user@remote_host

특정 포트를 사용하는 경우:

sftp -P 2222 user@remote_host

2. SFTP 대화형 명령어

연결되면 기본적으로 원격 환경에서 작동합니다. 전송 및 디렉터리를 관리하기 위해 명령어를 사용합니다.

명령어 설명 예시
ls 원격 파일 목록 표시 ls -l
cd 원격 디렉터리 변경 cd /var/www/html
put 파일 업로드 (로컬에서 원격으로) put local_data.zip
get 파일 다운로드 (원격에서 로컬로) get server_backup.tar.gz
lcd 로컬 디렉터리 변경 lcd /Users/me/downloads
lpwd 로컬 작업 디렉터리 출력 lpwd
mkdir 원격 디렉터리 생성 mkdir new_project
quit SFTP 세션 종료 quit

예시: SFTP 세션 내에서 업로드 및 다운로드

$ sftp [email protected]
sftp> cd /data/backups
sftp> lcd /home/local/reports
sftp> put daily_report.csv  # 파일 업로드
Uploading daily_report.csv to /data/backups/daily_report.csv
daily_report.csv                                      100% 512KB   4.3MB/s   00:00    
sftp> get configuration.yaml  # 파일 다운로드
Fetching /data/backups/configuration.yaml to configuration.yaml
configuration.yaml                                    100% 20KB    1.1MB/s   00:00    
sftp> quit

SCP 대 SFTP: 올바른 도구 선택

두 프로토콜 모두 안전하지만 서로 다른 운영 요구 사항을 충족합니다.

기능 SCP(Secure Copy Protocol) SFTP(SSH File Transfer Protocol)
메커니즘 단순 복사 프로토콜 (비대화형) 대화형 파일 관리 프로토콜 (상태 저장)
사용 사례 빠른 단일 파일 전송; 스크립팅/자동화. 복잡한 전송; 디렉터리 관리; 대화형 세션.
속도 오버헤드가 적어 일반적으로 더 빠름. 대화형 핸드셰이크로 인해 약간 느림.
재개 지원이 미흡하거나 존재하지 않음. 전송 재개 및 탐색을 완벽하게 지원합니다.
보안 상태 레거시 (일부 프로토콜 취약성). 현대적이고 강력한 표준.

SCP를 사용하는 경우: 스크립트 내에서 명령을 실행하고 비대화형이 선호되는 간단한 파일 전송에 최대 속도가 필요한 경우 SCP를 사용하십시오.

SFTP를 사용하는 경우: 거의 모든 수동 파일 전송, 여러 파일을 관리해야 하는 경우, 디렉터리를 변경해야 하는 경우 또는 세션의 견고성과 최신 보안 기능이 필요한 경우 SFTP를 사용하십시오.

안전한 파일 전송을 위한 모범 사례

SCP 또는 SFTP를 사용하는 것은 첫 번째 단계일 뿐입니다. 원격 환경을 보호하려면 SSH 서버에 대한 적절한 보안 구성이 필수적입니다.

1. SSH 키 인증 우선 순위 지정

암호 기반 인증은 무차별 대입 공격에 취약합니다. 파일 전송 인증을 위해 항상 공개/개인 SSH 키 쌍을 사용하십시오. 키 사용은 자동 또는 수동 전송 중 암호가 손상될 위험을 제거합니다.

키 생성 (필요한 경우):

ssh-keygen -t rsa -b 4096

전송을 위해 특정 키 사용:

scp -i ~/.ssh/my_transfer_key file.txt user@remote_host:/tmp/
# 또는
sftp -i ~/.ssh/my_transfer_key user@remote_host

2. 루트 로그인 비활성화

절대로 root 사용자를 사용하여 직접 파일을 전송하지 마십시오. 전송은 항상 전용의 낮은 권한을 가진 사용자 계정으로 수행되어야 합니다. 관리자 액세스가 필요한 경우, 원격 머신에서 로컬로 sudo를 사용하여 전송 후 파일을 적절한 위치로 이동할 수 있습니다.

3. ChrootDirectory를 사용한 액세스 제한 (SFTP)

외부 또는 신뢰할 수 없는 사용자에게 SFTP 액세스를 제공하는 시스템의 경우, sshd_config 파일 내에서 ChrootDirectory 제한을 구현하십시오. 이렇게 하면 SFTP 사용자가 특정 디렉터리에 갇히게 되어 파일 시스템의 나머지 부분을 탐색하지 못하게 됩니다.

/etc/ssh/sshd_config의 구성 스니펫 예시:

Match User sftp_external_user
  ForceCommand internal-sftp
  ChrootDirectory /var/sftp/%u
  AllowTcpForwarding no
  X11Forwarding no

4. 권한 제한

전송에 사용되는 사용자 계정이 작업에 필요한 최소한의 권한만 갖도록 하십시오 (최소 권한 원칙). 사용자가 /data/uploads에 파일을 업로드할 권한만 필요한 경우, /etc/config의 파일을 삭제할 수 없도록 하십시오.

결론

SSH는 신뢰할 수 있는 원격 작업을 수행하는 데 필요한 필수 보안 계층을 제공합니다. SCP는 스크립팅된 복사를 위한 빠르고 간단한 옵션이지만, SFTP는 포괄적인 파일 관리에 필요한 우수한 기능 세트, 대화형 제어 및 현대적인 견고성을 제공합니다. 키 기반 인증과 적절한 서버 측 구성을 활용함으로써 시스템 관리자는 파일 전송이 기능적일 뿐만 아니라 완전히 안전하도록 보장할 수 있습니다.