SCP를 사용하여 원격에서 로컬로 폴더 및 파일 복사

SCP를 사용하여 원격에서 로컬로 폴더 및 파일 복사
Shell

SCP로 파일 전송: 빠른 가이드

SCP(Secure Copy Protocol)는 원격 시스템과 로컬 시스템 간에 파일과 디렉터리를 전송하기 위한 편리한 도구입니다. SSH를 자주 사용하여 서버에 액세스하는 경우 폴더와 파일을 효율적으로 복사하는 방법을 아는 것이 데이터 관리에 필수적입니다.

이 가이드에서는 SCP를 사용하여 이름이 지정된 원격 폴더를 복사하는 방법을 살펴보겠습니다. 푸 로컬 컴퓨터, 특히 /홈/사용자/데스크톱. 이 튜토리얼에서는 SSH 및 터미널 명령에 대한 기본적인 이해가 있다고 가정합니다.

명령 설명
scp -r 디렉터리와 그 내용을 원격 호스트에서 로컬 시스템으로 반복적으로 안전하게 복사합니다.
paramiko.SSHClient() SSH 작업을 용이하게 하기 위해 Python에서 SSH 클라이언트 인스턴스를 만듭니다.
scp.get() Python에서 SCP 클라이언트를 사용하여 원격 호스트에서 로컬 경로로 파일이나 디렉터리를 검색합니다.
ansible.builtin.fetch 원격 시스템에서 로컬 시스템으로 파일을 가져오는 Ansible 모듈입니다.
flat: no 복사하는 동안 디렉터리 구조를 유지하기 위한 Ansible 가져오기 모듈의 옵션입니다.
validate_checksum: yes 체크섬의 유효성을 검사하여 복사된 파일의 무결성을 보장합니다.

파일 전송을 위한 SCP 이해

제공된 쉘 스크립트는 사용 방법을 보여줍니다. scp 원격 서버의 폴더를 로컬 컴퓨터로 복사합니다. 먼저, 원격 사용자 이름, 호스트, 디렉터리는 물론 로컬 디렉터리에 대한 변수를 정의합니다. 그런 다음 스크립트는 다음을 실행합니다. scp -r "보안 복사"를 의미하며 디렉터리의 재귀 복사를 허용하는 명령입니다. 구문 ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} 소스 경로를 지정하고, 로컬 시스템의 대상 경로를 지정합니다. 스크립트는 성공 메시지를 표시하여 종료됩니다.

Python 스크립트는 동일한 목표를 달성하지만 paramiko SSH 연결을 처리하는 라이브러리와 scp 보안 복사를 수행하는 라이브러리입니다. 필요한 라이브러리를 가져온 후 원격 및 로컬 디렉터리에 대한 변수를 설정합니다. 스크립트는 다음을 사용하여 SSH 클라이언트 인스턴스를 생성합니다. paramiko.SSHClient() 그리고 원격 서버에 연결합니다. connect 방법. 그런 다음 다음을 사용하여 SCP 클라이언트 인스턴스를 생성합니다. SCPClient(ssh.get_transport()) 그리고 scp.get 원격 디렉터리를 로컬 컴퓨터에 복사하는 방법입니다. 마지막으로 스크립트는 SCP 클라이언트를 닫습니다.

Ansible을 사용한 파일 전송 자동화

Ansible 플레이북은 원격 서버에서 로컬 시스템으로 파일을 복사하는 또 다른 방법입니다. Ansible은 YAML 기반 구성을 사용하여 작업을 정의합니다. 플레이북은 작업 이름을 지정하고 호스트(이 경우 localhost)를 지정하는 것으로 시작됩니다. 그런 다음 다음을 사용하여 원격 폴더를 가져오는 작업을 정의합니다. ansible.builtin.fetch 기준 치수. 그만큼 src 속성은 원격 디렉터리를 지정하는 반면, dest 속성은 로컬 대상을 지정합니다. 그만큼 flat: no 옵션을 사용하면 복사 중에 디렉터리 구조가 유지됩니다.

그만큼 fail_on_missing: yes 옵션은 소스 디렉터리가 존재하지 않는 경우 플레이북이 실패하도록 보장하여 추가 오류 처리 계층을 제공합니다. 추가적으로, validate_checksum: yes 옵션은 체크섬을 확인하여 복사된 파일의 무결성을 확인하고 파일이 손상 없이 올바르게 전송되었는지 확인합니다. 이 접근 방식은 일관되고 안정적인 방식으로 반복적인 파일 전송 작업을 자동화하는 데 특히 유용합니다.

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

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

# Copying a remote folder to local directory using SCP
#!/bin/bash
# Define variables
REMOTE_USER="your_username"
REMOTE_HOST="your_server_address"
REMOTE_DIR="/path/to/remote/folder"
LOCAL_DIR="/home/user/Desktop"
# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} ${LOCAL_DIR}
echo "Folder copied successfully to ${LOCAL_DIR}"

Python으로 SCP 파일 전송 자동화

자동 SCP 전송을 위한 Python 스크립트

import paramiko
from scp import SCPClient
# Define variables
remote_user = "your_username"
remote_host = "your_server_address"
remote_dir = "/path/to/remote/folder"
local_dir = "/home/user/Desktop"
# Create SSH client and connect
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(remote_host, username=remote_user)
# Create SCP client and transfer files
scp = SCPClient(ssh.get_transport())
scp.get(remote_dir, local_dir, recursive=True)
scp.close()

Ansible을 사용하여 SCP 파일 전송 관리

SCP 파일 전송을 위한 Ansible 플레이북

--- 
- name: Copy folder from remote to local
  hosts: localhost
  tasks:
    - name: Copy remote folder to local directory
      ansible.builtin.fetch:
        src: "/path/to/remote/folder"
        dest: "/home/user/Desktop"
        flat: no
        fail_on_missing: yes
        validate_checksum: yes

고급 SCP 기술 및 고려 사항

기본적인 파일 전송 외에도 SCP는 보다 복잡한 작업에 매우 유용할 수 있는 여러 가지 고급 기능과 옵션을 제공합니다. 그러한 기능 중 하나는 와일드카드 문자를 사용하여 여러 파일이나 디렉터리를 지정하는 기능입니다. 예를 들어, scp user@remote_host:/path/to/files/*.txt /local/path/ 원격 디렉터리의 모든 .txt 파일을 로컬 디렉터리로 복사합니다. 이렇게 하면 수많은 파일을 처리할 때 시간을 절약하고 작업 흐름을 간소화할 수 있습니다.

또 다른 유용한 기능은 -P SCP 연결을 위한 포트 번호를 지정할 수 있는 옵션입니다. 이는 SSH 서비스가 비표준 포트에서 실행되는 경우 특히 유용합니다. 예를 들어 scp -P 2222 user@remote_host:/path/to/file /local/path/ 포트 2222에서 원격 호스트에 연결됩니다. 또한 -C 옵션을 사용하면 전송 중에 데이터를 압축할 수 있으므로 대용량 파일의 전송 시간을 크게 줄일 수 있습니다. 이는 다음을 추가하여 달성됩니다. -C 다음과 같은 SCP 명령에 scp -C user@remote_host:/path/to/largefile /local/path/.

SCP 파일 전송에 관한 일반적인 질문

  1. SCP를 사용하여 전체 디렉터리를 어떻게 복사합니까?
  2. 명령을 사용하십시오 scp -r user@remote_host:/path/to/remote/dir /local/path/ 디렉토리를 재귀적으로 복사합니다.
  3. SCP를 사용하여 특정 포트에서 파일을 복사할 수 있나요?
  4. 예, 다음을 사용하여 포트를 지정할 수 있습니다. scp -P port_number user@remote_host:/path/to/file /local/path/.
  5. SCP를 사용하여 여러 파일을 어떻게 복사할 수 있나요?
  6. 다음과 같은 와일드카드 문자를 사용하세요. scp user@remote_host:/path/to/files/*.txt /local/path/ 여러 파일을 복사하려면
  7. SCP 전송 중에 파일을 압축할 수 있나요?
  8. 예, 다음을 추가하세요 -C SCP 명령에 대한 옵션(예: scp -C user@remote_host:/path/to/file /local/path/.
  9. SCP를 사용하여 대용량 파일 전송을 어떻게 처리합니까?
  10. 사용 -C 파일을 압축하고 중단을 방지하기 위해 안정적인 연결을 보장하는 옵션입니다.
  11. SCP를 스크립트로 자동화할 수 있나요?
  12. 예, 쉘 스크립트, Python 스크립트 또는 Ansible 플레이북을 사용하여 SCP 파일 전송을 자동화할 수 있습니다.
  13. SCP 전송이 실패하면 어떻게 해야 합니까?
  14. 네트워크 연결을 확인하고, 올바른 경로와 권한을 확인하고, SSH 구성을 확인하세요.
  15. SCP가 중단된 전송을 재개할 수 있나요?
  16. 아니요, SCP는 전송 재개를 지원하지 않습니다. 재개 가능한 전송을 위해 rsync 사용을 고려해보세요.
  17. SCP 전송 중에 파일 무결성을 어떻게 보장할 수 있나요?
  18. 사용 validate_checksum Ansible의 옵션을 선택하거나 전송 후 체크섬을 수동으로 확인하세요.

SCP 전송에 대한 최종 생각:

원격 시스템과 로컬 시스템 간의 파일 전송을 위해 SCP 사용을 익히는 것은 효율적인 서버 관리를 위한 필수 기술입니다. 셸 스크립트, Python 스크립트, Ansible 플레이북을 활용하면 이러한 작업을 자동화하고 단순화하여 시간을 절약하고 오류를 줄일 수 있습니다. 재귀 복사, 포트 사양 및 데이터 압축과 같은 고급 옵션은 SCP의 다양성을 더욱 향상시킵니다. 일상적인 작업이든 대규모 데이터 마이그레이션이든 이러한 기술을 이해하면 안전하고 안정적인 파일 전송이 보장됩니다.