SCP を使用して Linux でファイルを安全に転送する方法
ファイルをリモート Linux サーバーに転送する場合、いくつかのオプションがあります。最善の方法の 1 つは、セキュア コピー (SCP) と呼ばれるプログラムを使用することです。SCP は、SSH プロトコル上で実行され、ネットワークを介してリモート システムにファイルをすばやく転送します。このチュートリアルでは、Linux で SCP を使用してファイルを安全に転送する方法を示します。
SSH の設定
リモート サーバーに SSH サーバーをインストールする必要があります。Linux で最も一般的なのは OpenSSH サーバーです。インストールするには、次のコマンドのいずれかを実行します。
# Debian/Ubuntu-based serversudo apt install ssh
# Fedorasudo dnf install openssh
ディストリビューションによっては、一部のソフトウェア ファイアウォールを介して SSH を許可する必要がある場合があります。Ubuntu ではこの問題は存在しませんが、Fedora では次のコマンドも実行する必要があります。
sudo firewall-cmd --add-service=ssh --permanentsudo firewall-cmd --reload
SSH 経由でシステムに接続する
SSH 経由で接続する前に、リモート サーバーの IP アドレスを調べる必要があります。グラフィカル サーバーでは、IP アドレスは [システム設定] の [ネットワーク] アプレットに表示されます。ほとんどのサーバーでip
は、ターミナルでコマンドを使用する必要があります。
ip addr
出力で、ネットワーク インターフェイスがシステムに接続されている方法に応じて、inet
underethX
またはで始まる行を探します。enpXsy
私の場合、192.168.68.108 です。
SSH 接続をテストするには、別の Linux マシンに移動して次のように入力します。
ssh user@remote.machine.ip.address
「user」をサーバーの実際のユーザー名に変更します。
そのアカウントのパスワードを入力してください。「ホストの信頼性を確立できない」という質問があった場合は、単に「はい」と答えてください。これは、なりすましではなく実際のサーバーに接続していることを確認するためのセキュリティ チェックです。サーバーに直接ログインしたときに表示されるのと同じプロンプトがクライアント システムに表示されるはずです。これは、接続が成功したことを意味します。また、次のステップに進む前に、最大限のセキュリティを確保するために SSH 接続を構成するか、2 要素認証をセットアップする必要があります。
SCP を使用してファイルを転送する
SSH 接続をテストしたので、2 台のマシン間でファイルのコピーを開始します。コマンドを使用して安全なコピーを実現しscp
ます。scp
コマンドの基本的な形式は次のとおりです。
scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION
たとえば、ファイル「backup.tar.gz」をローカル マシンから、IP アドレスが 192.168.68.165 のリモート サーバー上のユーザー「ramces」のホーム ディレクトリにある「backups」フォルダにコピーするには、次のコマンドを使用します。
scp backup.tar.gz ramces@192.168.68.165:~/backups/
を使用して接続する場合と同様にssh
、パスワードの入力を求められます。コマンドで指定されたように、ユーザー名の入力を求めるプロンプトは表示されません。
次のようなワイルドカードも使用できます。
scp *.tar.gz ramces@192.168.68.165:~/backups/
リモート サーバーからローカル マシンにファイルをコピーするには、パラメーターを逆にします。
scp ramces@192.168.68.165:~/backups/backup.tar.gz. /
コマンドの末尾にあるドットに注意してください。cp
標準またはmv
コマンドと同様に、「現在のディレクトリ」を意味します。必要に応じて、他のディレクトリを簡単に指定できます。
scp -r ramces@192.168.68.165:~/backups/ backups-from-server/
ワイルドカードも同様です:
scp ramces@192.168.68.165:~/backups/*.txz. /
ディレクトリをリモート サーバーに再帰的にコピーするには、次の-r
オプションを使用します。
scp -r backups/ ramces@192.168.68.165:~/backups/
ディレクトリの再帰コピーをリモート サーバーからローカル マシンにコピーするには、次のコマンドを使用します。
scp -r ramces@192.168.68.165:~/backups/. /
SCP でのファイル転送の圧縮
基本的なコピーとは別に、これらのファイル転送中の SCP の動作を変更することもできます。たとえば、-C
フラグを使用して、SCP がリモート クライアントに送信するデータを圧縮できます。
scp -C backup.tar.gz ramces@192.168.68.165:/home/ramces/
このオプションは、SCP プログラムを介して送信される各データ パケットを圧縮することによって機能します。そのため、帯域幅が制限された接続を使用していて、ファイルをリモート サーバーに確実に送信したい場合、これは非常に便利です。
上記のオプションと同様に-C
、フラグと一緒に使用-r
して、ファイルを再帰的に圧縮してリモート マシンに転送することもできます。たとえば、次のコマンドは、リモート サーバーから「backup.tar.gz」ファイルを圧縮して取得します。
scp -Cr ramces@192.168.68.165:/home/ramces/backups /home/ramces/
SCP によるデータ転送の最適化
ほとんどの場合、SCP はすべてのファイル転送に AES-128 暗号化アルゴリズムを使用しようとします。ただし、この特定のアルゴリズムが転送するファイルに適していない場合があります。
それを知っていれば、特定の転送の暗号アルゴリズムを直接変更することで、SCP をさらに最適化して保護することができます。これを行うには、-c
フラグの後に使用する暗号を使用する必要があります。
たとえば、次のコマンドは、AES-256 を使用して「backup.tar.gz」ファイルをリモート サーバーに転送します。
scp -c aes256-ctr. /backup.tar.gz ramces@192.168.68.165:/home/ramces/
さらに、この-c
オプションを使用すると、特定のファイル転送に使用する暗号のリストを提供することもできます。たとえば、次のコマンドは、「backup.tar.gz」ファイルをリモート サーバーに転送する際に、AES-192 と AES-256 の両方を使用します。
scp -c aes192-ctr,aes256-ctr. /backup.tar.gz ramces@192.168.68.165:/home/ramces/
SCP での帯域幅使用の制限
ファイル パケットを圧縮すると、ネットワーク状態が悪い場合に SCP を使用するのに役立ちますが、転送中にプログラムが使用する帯域幅を制限することもできます。これは、従量制接続を使用していて、SCP がネットワーク帯域幅を支配したくない場合に役立ちます。
プログラムの実効帯域幅を制限するには、-l
フラグを使用し、その後に希望する上限をキロビット/秒 (Kb/s) で指定する必要があります。たとえば、次のコマンドを実行すると、「backup.tar.gz」ファイルが 1,600 Kb/s の実効帯域幅でリモート サーバーに転送されます。
scp -l 1600. /backup.tar.gz ramces@192.168.68.165:/home/ramces/
SCP を使用したリモートからリモートへの転送
SCP はファイル転送のみを処理し、ローカル マシンとリモート マシンを区別しないため、ローカル ファイルをリモート サーバーにコピーしたり、その逆にコピーしたりするだけでなく、SCP を使用してローカル マシンから複数のリモート サーバーを管理することもできます。
2 つのリモート サーバー間で転送するには、それらの各マシンのユーザー名とアドレスを明示的に指定する必要があります。たとえば、次のコマンドを実行すると、2 つのリモート サーバー間で「remote-backup.tar.gz」ファイルが転送されます。
scp ramces@192.168.68.108:/home/ramces/remote-backup.tar.gz ramces@192.168.68.165:/home/ramces/
SCP でのプロキシの使用
デフォルトでは、SCP は異なるホスト間でファイルを転送するときは常にローカル マシンの IP アドレスを使用します。これは通常の状況ではまったく問題ありませんが、ローカル ネットワークが SCP アクティビティを制限している場合は問題になる可能性があります。この問題に対処する簡単な方法の 1 つは、ローカル接続を SSH プロキシ経由で渡すことです。
これを行うには、-o
フラグの後にProxyCommand
オプションを使用する必要があります。これにより、SCP コマンドを実行する新しいマシンへの基本的な SSH 接続を作成できます。たとえば、次のコマンドを実行すると、リモート マシンで新しい SSH プロキシが作成され、それを使用して「backup.tar.gz」ファイルが転送されます。
scp -o "ProxyCommand ssh ramces@192.168.68.108 nc %h %p". /backup.tar.gz ramces@192.168.68.165:/home/ramces/
SCP のデフォルト ポートの変更
基本的な SSH プロキシを作成する以外に、SCP のデフォルト ポートを変更することもできます。これは、Linux サーバーを保護していて、デフォルトのポートを公開したくない場合に特に役立ちます。
別のポートで SCP を使用するには、-P
フラグの後に使用するポート番号を指定する必要があります。たとえば、次のコマンドは、「バックアップ」ディレクトリを再帰的にコピーし、ポート 2222 を使用してリモート サーバーに接続します。
scp -r -P 2222. /backup ramces@192.168.68.165:/home/ramces/
SCP 静音モードの使用
最後に、SCP コマンドから端末出力を完全に削除することもできます。これは、マシンで実行する非対話型スクリプトを作成する場合に特に便利です。それだけでなく、cronjob を作成して秘密 SSH キーをサーバーに転送することで、このプロセスを完全に自動化することもできます。
-q
静かな SCP 転送を作成するには、フラグを使用する必要があります。たとえば、次のコマンドは、「backup.tar.gz」ファイルをサイレント モードでリモート サーバーに転送します。
scp -q. /backup.tar.gz ramces@192.168.68.165:/home/ramces/
よくある質問
SCP でのリモートからリモートへの転送が機能しません。どうすればこれを修正できますか?
この問題は、リモート マシンの構成ファイルの 1 つでブロックされたポートが原因である可能性が最も高いです。この問題を解決するには、両方のマシンで SSH のデフォルト ポートが開いていることを確認してください。
この問題は、リモート マシンの 1 つが CG-NAT 接続の背後にあることが原因である可能性もあるため、リモート マシンへの外部接続は適切に解決されません。これを修正するには、Yggdrasil などの仮想 LAN プログラムを使用して、CG-NAT をパンチスルーできるようにする必要があります。
SCP プロキシを実行すると、リモート ホストが接続を閉じました。私に何ができる?
この問題は、プロキシ マシンの問題が原因である可能性が最も高いです。SSH プロキシを適切に開始するには、使用するマシンに OpenSSH サーバーと netcat があることを確認してください。これらのプログラムを Ubuntu にインストールするには、次のコマンドを実行しますsudo apt install ssh netcat
。
SCP で利用可能なすべての暗号を知ることは可能ですか?
デフォルトでは、SCP プログラムは暗号化機能を SSH プロトコルに大きく依存しています。そのため、SSH プログラムを使用して、SCP と共に使用できる暗号のリストを出力できます。たとえばssh -Q ciphers
、マシンで使用可能なすべての暗号の簡単なリストを印刷するために実行できます。
画像クレジット: Unsplash . Ramces Redによるすべての変更とスクリーンショット。
コメントを残す