SCP를 사용하여 원격에서 로컬로 파일 전송

SCP를 사용하여 원격에서 로컬로 파일 전송
Shell

파일을 안전하게 복사하기: SCP 사용 가이드

SCP(Secure Copy Protocol)는 원격 서버와 로컬 시스템 간에 파일과 디렉터리를 안전하게 전송하기 위한 강력한 도구입니다. SSH를 자주 사용하여 서버에 액세스하는 경우 SCP를 효과적으로 사용하는 방법을 알면 작업 흐름을 간소화하여 중요한 파일을 원격 서버에서 로컬 시스템으로 빠르고 안전하게 복사할 수 있습니다.

이 가이드에서는 "foo"라는 원격 폴더를 /home/user/Desktop의 로컬 디렉터리에 복사하는 단계를 안내합니다. 백업을 관리하든, 코드를 배포하든, 파일을 이동해야 하든 SCP 명령을 이해하면 작업이 더 쉽고 효율적이 됩니다.

명령 설명
scp -r 전체 디렉터리를 원격에서 로컬 컴퓨터로 안전하게 복사합니다.
paramiko.SFTPClient.from_transport() 기존 SSH 전송에서 SFTP 클라이언트를 생성합니다.
os.makedirs() 디렉터리를 재귀적으로 생성하여 모든 중간 수준 디렉터리가 생성되도록 합니다.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 메시지를 표시하지 않고 서버의 호스트 키를 자동으로 추가하며 스크립팅에 유용합니다.
scp.listdir_attr() 재귀 복사 기능을 활성화하여 디렉터리에 있는 파일의 속성을 나열합니다.
paramiko.S_ISDIR() 지정된 경로가 디렉터리인지 확인하여 재귀 복사를 지원합니다.
scp.get() 원격 서버의 파일을 로컬 컴퓨터로 복사합니다.

SCP 스크립트에 대한 자세한 설명

첫 번째 스크립트 예제에서는 scp -r 원격 디렉터리를 로컬 컴퓨터에 복사하는 명령입니다. 그만큼 scp Secure Copy Protocol을 의미하는 명령은 SSH를 사용하여 원격 호스트와 로컬 시스템 간에 파일을 안전하게 전송하는 명령줄 도구입니다. 그만큼 -r 명령의 플래그는 작업이 재귀적이어야 함을 지정합니다. 즉, 지정된 디렉터리 내의 모든 파일과 디렉터리를 복사한다는 의미입니다. 명령 구조는 간단합니다. . 여기, user@remote_host 원격 사용자와 호스트를 지정하고 /path/to/remote/folder 그리고 /home/user/Desktop/ 각각 소스 및 대상 경로입니다.

두 번째 예는 SCP 프로세스를 자동화하는 쉘 스크립트입니다. 이 스크립트는 원격 사용자, 호스트 및 경로에 대한 변수를 정의하므로 쉽게 재사용하고 수정할 수 있습니다. 스크립트는 scp -r Bash 스크립트 내에서 파일을 전송합니다. 이는 반복적인 전송이 필요한 시나리오에 도움이 됩니다. 또한 전송이 완료되면 사용자에게 알리는 알림 메시지도 포함되어 있습니다. 세 번째 예에서는 Paramiko 라이브러리와 함께 Python을 사용합니다. 이는 특히 더 복잡하거나 자동화된 작업 흐름에 유용합니다. 스크립트는 SSH 클라이언트를 설정하고 paramiko.SFTPClient.from_transport() SFTP 세션을 생성하는 방법입니다. 그런 다음 다음을 사용하여 원격 서버에서 로컬 디렉터리로 파일을 반복적으로 복사하는 기능을 정의합니다. scp.listdir_attr() 그리고 paramiko.S_ISDIR() 파일과 디렉토리를 구별하기 위해. 이 접근 방식은 Python에서 스크립팅을 선호하고 파일 전송 기능을 더 큰 자동화 스크립트에 통합해야 하는 사람들에게 유용합니다.

SCP를 사용하여 원격 서버에서 로컬 시스템으로 파일 전송

SCP용 쉘 스크립트

# Basic SCP command to copy a remote folder to a local directory
scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/

# Breakdown of the command:
# scp: invokes the SCP program
# -r: recursively copies entire directories
# user@remote_host:/path/to/remote/folder: specifies the user and path to the remote folder
# /home/user/Desktop/: specifies the local destination directory

# Example usage with real values:
scp -r user@example.com:/var/www/foo /home/user/Desktop/

쉘 스크립트를 사용하여 SCP 전송 자동화

SCP 자동화를 위한 쉘 스크립트

#!/bin/bash
# This script automates the SCP process

# Variables
REMOTE_USER="user"
REMOTE_HOST="remote_host"
REMOTE_PATH="/path/to/remote/folder"
LOCAL_PATH="/home/user/Desktop/"

# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} ${LOCAL_PATH}

# Notify user of completion
echo "Files have been copied successfully from ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} to ${LOCAL_PATH}"

SCP 파일 전송을 위한 Python 스크립트

Paramiko 라이브러리를 사용한 Python 스크립트

import paramiko
import os

# Establish SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='user', password='password')

# SCP command
scp = paramiko.SFTPClient.from_transport(ssh.get_transport())

# Define remote and local paths
remote_path = '/path/to/remote/folder'
local_path = '/home/user/Desktop/'

# Function to recursively copy files
def recursive_copy(remote_path, local_path):
    os.makedirs(local_path, exist_ok=True)
    for item in scp.listdir_attr(remote_path):
        remote_item = remote_path + '/' + item.filename
        local_item = os.path.join(local_path, item.filename)
        if paramiko.S_ISDIR(item.st_mode):
            recursive_copy(remote_item, local_item)
        else:
            scp.get(remote_item, local_item)

# Start copy process
recursive_copy(remote_path, local_path)

# Close connections
scp.close()
ssh.close()
print(f"Files have been copied successfully from {remote_path} to {local_path}")

고급 SCP 사용법: 팁과 요령

기본적인 사용법 외에도 scp 파일 및 디렉터리 복사를 위해 파일 전송 경험을 향상시킬 수 있는 몇 가지 고급 기술과 옵션이 있습니다. 유용한 기능 중 하나는 전송 중에 사용되는 대역폭을 제한하는 기능입니다. 이는 제한된 네트워크 리소스로 작업할 때 특히 유용할 수 있습니다. 이는 다음을 사용하여 달성할 수 있습니다. -l 옵션 뒤에 초당 킬로비트 단위의 대역폭 제한이 옵니다. 예를 들어, scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. 또 다른 유용한 옵션은 -C 압축을 활성화하여 잠재적으로 대용량 파일의 전송 속도를 높이는 플래그입니다.

보안은 사용할 때 고려해야 할 또 다른 중요한 측면입니다. scp. 하는 동안 scp 본질적으로 보안 전송을 위해 SSH를 사용하므로 보안을 강화하기 위해 취할 수 있는 추가 단계가 있습니다. 예를 들어 인증에 비밀번호 대신 SSH 키를 사용하면 보안과 편의성이 크게 향상될 수 있습니다. 또한 다음을 사용하여 다른 SSH 포트를 지정할 수 있습니다. -P 서버가 기본 포트 22를 사용하지 않는 경우 옵션입니다. 예를 들어, scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ 포트 2222에서 SSH를 실행하는 서버에 연결할 수 있습니다.

SCP에 관해 자주 묻는 질문과 답변

  1. SCP를 사용하여 로컬에서 원격으로 파일을 어떻게 복사합니까?
  2. 당신이 사용할 수있는 scp local_file user@remote_host:/path/to/remote/directory.
  3. SCP 전송 진행 상황을 어떻게 확인할 수 있나요?
  4. 사용 -v 상세 모드를 활성화하는 옵션: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. SCP를 사용하는 동안 파일 속성을 보존할 수 있나요?
  6. 예, 다음을 사용하세요. -p 수정 시간, 액세스 시간 및 모드를 보존하는 옵션: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. 다른 SSH 키로 SCP를 어떻게 사용합니까?
  8. 다음을 사용하여 SSH 키를 지정합니다. -i 옵션: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. SCP를 사용하여 대용량 파일 전송을 어떻게 처리합니까?
  10. 사용 -C 압축 옵션과 -l 대역폭을 제한하는 옵션: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. 다른 SSH 포트를 통해 SCP를 사용하여 파일을 어떻게 전송합니까?
  12. 사용 -P 포트를 지정하는 옵션: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. SCP가 심볼릭 링크를 처리할 수 있나요?
  14. 예, -r 옵션은 파일 및 디렉토리뿐만 아니라 심볼릭 링크도 복사합니다.
  15. SCP 전송이 중단되면 어떻게 되나요?
  16. 다시 실행 scp 전송을 재개하라는 명령; 이미 복사된 파일은 건너뜁니다.
  17. 스크립트에서 비밀번호와 함께 SCP를 어떻게 사용합니까?
  18. 대신 SSH 키를 사용하는 것이 좋지만 다음과 같은 도구를 사용할 수도 있습니다. sshpass 스크립트에서 비밀번호 인증을 위해.

SCP 사용에 대한 최종 생각

SCP를 사용하여 원격 서버에서 로컬 시스템으로 파일과 디렉터리를 전송하는 방법을 이해하면 작업 흐름 효율성을 크게 향상시킬 수 있습니다. 기본 명령과 고급 기술을 모두 익히면 안전하고 효율적인 데이터 전송을 보장할 수 있습니다. 단일 파일을 복사하든 전체 디렉터리를 복사하든, 스크립트로 작업을 자동화하든, 더 복잡한 작업을 위해 Python을 사용하든 SCP는 데이터 관리 요구 사항을 충족하는 다재다능하고 강력한 도구로 남아 있습니다.