SCP を使用したリモートからローカルへのファイルの転送

SCP を使用したリモートからローカルへのファイルの転送
Shell

ファイルを安全にコピーする: SCP の使用ガイド

Secure Copy Protocol (SCP) は、リモート サーバーとローカル マシン間でファイルとディレクトリを安全に転送するための強力なツールです。 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 コマンド内のフラグは、操作が再帰的であることを指定します。つまり、指定されたディレクトリ内のすべてのファイルとディレクトリがコピーされます。コマンドの構造は単純です。 scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/。ここ、 user@remote_host リモート ユーザーとホストを指定します。 /path/to/remote/folder そして /home/user/Desktop/ はそれぞれ送信元パスと宛先パスです。

2 番目の例は、SCP プロセスを自動化するシェル スクリプトです。このスクリプトはリモート ユーザー、ホスト、パスの変数を定義するため、再利用や変更が簡単になります。スクリプトが使用するのは、 scp -r Bash スクリプト内でファイルを転送します。これは、繰り返し転送が必要なシナリオに役立ちます。転送の完了をユーザーに通知する通知メッセージも含まれます。 3 番目の例では、Python と Paramiko ライブラリを使用します。これは、より複雑なワークフローや自動化されたワークフローに特に役立ちます。スクリプトは 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 ファイルとディレクトリのコピーには、ファイル転送エクスペリエンスを向上させる高度なテクニックとオプションがいくつかあります。便利な機能の 1 つは、転送中に使用される帯域幅を制限する機能です。これは、限られたネットワーク リソースを使用する場合に特に役立ちます。これは、 -l オプションの後に帯域幅制限をキロビット/秒で指定します。例: scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/。もう 1 つの便利なオプションは、 -C このフラグを使用すると、圧縮が有効になり、大きなファイルの転送が高速化される可能性があります。

セキュリティは、使用時に考慮すべきもう 1 つの重要な側面です。 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. SCP を使用して別の SSH ポート経由でファイルを転送するにはどうすればよいですか?
  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 はデータ管理のニーズを満たす多用途かつ強力なツールであり続けます。