セキュアなファイル転送の基本

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、Linux コマンド ラインを使って SFTP、FTP、および SCP を使ってファイルを転送する基本方法について説明します。これらのツールは、リモート サーバーとの間でファイルを転送するために一般的に使用されており、サーバーにウェブサイト ファイルをアップロードしたり、リモート マシンからデータをダウンロードしたりするタスクに役立ちます。

我々は、実験環境で SFTP および FTP サーバーを構成しました。実際に使用する際には、リモート サーバーにアクセスするための必要な資格情報 (ユーザー名とパスワードなど) があり、サーバーが SFTP、FTP、および SCP を介したファイル転送を許可するように構成されていることを確認してください。

達成目標

  • sftp - セキュア ファイル転送プロトコル
  • ftp - ファイル転送プロトコル
  • scp - セキュア コピー

SFTP を使ってリモート サーバーに接続する

SFTP (Secure File Transfer Protocol) は、ローカル マシンとリモート サーバーの間でファイルを転送するためのセキュアな方法です。

SFTP を使ってリモート サーバーに接続するには、sftp コマンドの後にユーザー名とサーバーの IP アドレスまたはホスト名を入力します。たとえば:

sftpuser のパスワードは 123456 です。

sftp sftpuser@127.0.0.1
## サーバーの指紋を承認するには yes と入力します

ユーザーのパスワードの入力を求められます。正しいパスワードを入力すると、リモート サーバーに接続されます。

SFTP でファイルを転送する

リモートサーバーに接続したら、put コマンドと get コマンドを使用してファイルを転送できます。

ローカルマシンからリモートサーバーにファイルをアップロードするには、put コマンドの後にローカルファイルのパスを指定します。例:

put /home/labex/.zshrc

リモートサーバーからローカルマシンにファイルをダウンロードするには、get コマンドの後にリモートファイルのパスを指定します。例:

get .zshrc

ファイルの転送が完了したら、exit コマンドを使用して SFTP 接続を閉じることができます。

exit

「Continue」ボタンをクリックする前に、必ず SFTP 接続を閉じてください。

FTP を使ってリモート サーバーに接続する

FTP (File Transfer Protocol) は、ローカル マシンとリモート サーバーの間でファイルを転送するために使用される標準的なネットワーク プロトコルです。平文でデータを送信するため、SFTP よりもセキュリティが低いです。

次のコマンドを実行することで、FTP サービスの状態を確認できます。

sudo service vsftpd status

FTP サービスが実行されていない場合は、次のコマンドを実行して起動できます。

sudo service vsftpd start

FTP を使ってリモート サーバーに接続するには、ftp コマンドの後にサーバーの IP アドレスまたはホスト名を入力します。たとえば:

ftp のユーザー名は ftpuser、パスワードは 123456 です

ftp 127.0.0.1

サーバーのユーザー名とパスワードの入力を求められます。正しい資格情報を入力すると、リモート サーバーに接続されます。

FTP でファイルを転送する

リモートサーバーに接続したら、put コマンドと get コマンドを使用してファイルを転送できます。

ローカルマシンからリモートサーバーにファイルをアップロードするには、put コマンドの後にローカルファイルのパスを指定します。例:

## .zshrc ファイルをサーバーにアップロードし、zshrc-upload に名前を変更します
put /home/labex/.zshrc zshrc-upload

ファイルは、サーバーの現在のディレクトリ(/home/ftpuser)にアップロードされます。

リモートサーバーからローカルマシンにファイルをダウンロードするには、get コマンドの後にリモートファイルのパスを指定します。例:

get zshrc-upload

ファイルは、ローカルマシンの現在のディレクトリにダウンロードされます。

FTP シェルで help コマンドを実行すると、FTP コマンドの詳細が表示されます。

ファイルの転送が完了したら、bye コマンドまたは exit コマンドを使用して FTP 接続を閉じることができます。

bye

「Continue」ボタンをクリックする前に、必ず FTP 接続を閉じてください。

リモートサーバーへのファイルコピー

SCP (Secure Copy) は、ローカルマシンとリモートサーバー間、またはリモートサーバー同士でファイルを安全に転送するためのコマンドラインユーティリティです。SSH (Secure Shell) を利用して転送データを暗号化するため、ファイルを安全に送受信できます。

scp コマンドの基本的な構文は以下の通りです。

scp [options] [source] [destination]

source(送信元)および destination(送信先)の引数には、ローカルのファイルやディレクトリ、あるいは username@host:path 形式のリモートファイルやディレクトリを指定できます。

例えば、ローカルマシンにある file.txt を IP アドレス 127.0.0.1 のリモートサーバーへコピーする場合、以下のコマンドを使用します。

labex ユーザーのパスワードを確認するには、デスクトップのターミナルで printenv | grep PASSWORD と入力してください。デスクトップインターフェース以外のターミナルではパスワードは表示されません。

SCP command example

cd ~/project

## View the password for the labex user
printenv | grep PASSWORD

## Copy the file to the remote server
scp file.txt labex@127.0.0.1:/home/labex/file-scp.txt

## Enter the password for the labex user

リモート サーバーからファイルをダウンロードする

リモート サーバーからファイルをダウンロードする際にも、scp を使用できます。

たとえば、IP アドレス 127.0.0.1 のリモート サーバーから file.txt ファイルをローカルにダウンロードするには、次のコマンドを使用します。

scp labex@127.0.0.1:/home/labex/file-scp.txt /home/labex/file-scp-new.txt

また、ローカル ディレクトリを宛先として設定することもできます。この場合、パスに末尾のスラッシュ (/) を含めることを確認してください。

SCP の高度なオプション

scp には、ファイル転送をカスタマイズするために使用できるいくつかの高度なオプションもあります。最も一般的に使用されるオプションのいくつかを以下に示します。

  • -r - このオプションを使用すると、ディレクトリ全体を再帰的にコピーできます。
  • -C - このオプションを使用すると、ファイル転送中に圧縮が有効になります。低速な接続で大きなファイルを転送する際に便利です。
  • -P - このオプションを使用すると、接続に使用するポート番号を指定できます。

たとえば、圧縮を使用してポート番号を指定しながら、ローカル マシンの ~/Desktop ディレクトリを IP アドレス 127.0.0.1 のリモート サーバーにコピーするには、次のコマンドを使用します。

scp -r -C -P 22 ~/Desktop labex@127.0.0.1:/home/labex/Code/

まとめ

この実験では、Linux の SFTP、FTP、および SCP コマンドを紹介しました。これらのコマンドは、ローカル マシンとリモート サーバーの間、または 2 つのリモート サーバーの間でファイルを転送するために使用されます。SFTP はファイルを転送する安全な方法であり、一方で FTP は SFTP よりもセキュリティが低い標準的なネットワーク プロトコルです。SCP は、コマンド ライン ユーティリティで、転送中のデータを暗号化するために SSH (Secure Shell) を使用して、ローカル マシンとリモート サーバーの間、または 2 つのリモート サーバーの間でファイルを安全に転送できます。また、SCP コマンドに利用可能ないくつかの高度なオプションについても説明しました。これらのオプションは、-r-C-P オプションなど、ファイル転送をカスタマイズするために使用できます。