前回は、さくらのVPS で CentOS8 x86_64 をインストールしました。

ユーザーの作成 SSHの設定前回の記事で行っているので、そちらも確認してみてください。

今回は、SFTP(SSH FTP)を使用してファイルを転送します。

ネットワーク上にあるサーバーにファイルを転送する手順のことを FTP(File Transfer Protocol: ファイル転送プロトコル)といいます。

FTP は古くからあり、転送するファイルや認証のためのパスワードなどがすべて平文で送受信されます。そのため近年では 暗号化して転送を行う FTPSSFTP を使用します。

プロトコル ポート番号 説明 暗号化
FTP 20/21 昔からあるファイル転送プロトコル。
20: FTPデータ転送ポート
21: FTP制御ポート(コマンド送受信用)
なし
FTPS
(FTP over SSL/TLS)
989/990 FTPをSSLもしくはTSLで暗号化する。
989: FTPデータ転送ポート
990: FTP制御ポート(コマンド送受信用)
あり
(SSL/TLS)
SFTP
(SSH FTP)
22
(SSHと同じ)
SSHを利用してファイルを転送する。 あり
(SSH)

FTPの使用は避けましょう

FTPはインターネット初期の頃から存在し、ファイルも認証用のユーザー名パスワードすべて平文で送受信されます

暗号化されない上に、多くのセキュリティ脆弱性があると指摘されています。

どうしてもという場合は仕方ないかもしれませんが、なるべく使用は控えるようにしましょう。

ポート番号 20番と 21番を使用しますが、ファイルの転送は 20番 で行い、コマンドなどの制御文は21番を使用して送受信されます。

FTPS(FTP over SSL/TLS)とは

FTPSSSL(Secure Sockets Layer)もしくは TLS(Transport Layer Security)を 使用して転送を暗号化します。

この 暗号化方式は HTTPS と同じです。そのため、ドメインごとに既に証明書を発行しているものがあれば、その証明書を使うことができます。

証明書が無い場合は、Let’s Encrypt(無料) で証明書を発行してもらうか、他のサービスから購入します。自己署名証明書(オレオレ証明書)も使用できますが、本番環境などでは避けた方が無難だと思います。

また、使用するポートは989番と990番ですが、Explicit(明示的)モードで行う場合、認証を行うまでは 通常の FTP として機能するため、20番と21番が使用されます。

FTPS では、転送モードとして ASCIIモードとBINARYモードを選択できます

SFTP(SSH FTP)とは

SFTPは SSH を使用してファイルを転送します。

前回の記事で 「SSHを使用して新規ユーザーでログインする」を行っていますが、準備もほとんどこれだけです。FTPS より簡単に実現できます。

また、SSHと同様のポートを使用するため、ファイル転送のために新しいポートを開く必要もありません。ポートを開放することは、セキュリティリスクを増やすことになるので、SSH と同等のポートで通信できるというのはメリットです。

FTPS と 比較して転送スピードが遅いと言われますが、大きな差はありません。FTPS は ファイルと制御文の送受信でそれぞれ別のポートを使用しますが、SFTPは一つのポートで行うのでほんの少しだけ遅くなるという感じです。

SFTPでは、ASCIIモードには対応しておらず、BINARYモードが使用されます

FTP転送モード ASCII/BINARY

FTPではファイルの転送モードを指定することができます。

ASCII(アスキー)モード

ASCIIモードは、転送するファイルの改行コードを転送先の環境に合せるように変換します

変換することで環境が変わっても改行コードの文字化けを防ぐことができます

例えば、Windows の エディタで文章を作成した場合の改行コードは 標準で 「CR + LF(\r\n)」が使用されますが、他の OS では 「LF(\n)」が主流となっています。

つまり、Windows の標準で使用される 改行コードは、他のOSで改行文字として認識できないので 文字化けが発生することがあるということです。

これらを防ぐために変換を行うのですが、zipファイルなどの圧縮されたファイルの改行コードを変換すると、ファイルが破損してしまうというデメリットがあります。

CR: キャリッジリターン
LF: ラインフィード

  • アスキーモードでは、圧縮ファイルや画像などが破損する可能性があります。

BINARY(バイナリ)モード

BINARYモードは、ファイルをそのままの状態で転送します。

そのため、ASCIIモードでは破損してしまう圧縮ファイルなどの転送には、このBINARYモードを使用します。

また、近年では OS が 改行コードの差異に対応できるようになってきているため、ASCIIモードではなくBINARYモードの使用が推奨されています。

  • バイナリモードで転送するようにしましょう。

FTPS vs SFTP

FTPS と SFTP とどちらを使用するかですが、特に理由がなければ SFTP でいいと思います。

FTPS と比べて実装が楽ですし、ポートの開放もする必要がありません。ASCIIモードを使用するのであれば FTPS かなと思うのですが、最近のOSであればBINARYモードでも大丈夫そうです。

スピードに関しては少しだけSFTPの方が遅いですが、コマンドの送受信だけの差なので気にする必要はないかと思います。

というわけで、今回の記事では SFTP でファイル転送を行うまでのやり方を記述します

FTPクライアントをダウンロード

SSH で接続した状態でscp コマンドを使用すればファイルやディレクトリをサーバーに転送することができます。

転送ファイルが一つや二つならいいのですが、量が増えるとどうしても視覚的に操作したいと感じる場合があります。

ファイルの更新が頻繁だったり、不要なファイルを削除したりする機会が多い場合など、この FTPクライアント があれば視覚的にファイルの転送を操作することができます。

FileZillaをダウンロード

ファイルを転送するために必要な FTPクライアント(アプリ)をローカルのパソコンにダウンロードします。

ここでは、FTPクライアントの中でも最も有名な FileZilla(ファイルジラ)を使用します。

まずは、FileZillaのダウンロードページから ダウンロード を行ってください。

  • FileZilla以外を選択する場合、SFTPに対応しているクライアントを選択する必要があります。
Download FileZilla

FileZillaを起動する

ダウンロードが終われば、ファイルを解凍して FileZilla を起動します。

Mac をお使いの方は、Application(アプリケーション)ディレクトリに FileZilla を移動させておくといいと思います。

以下のように起動できればダウンロードは完了です。

FileZilla Start View(起動画面)

既存ユーザーでSFTPで接続する

ここでは、前回の記事で作成した ユーザー xxx を使用してファイルを転送してみましょう。

既に SSH でログインできる状態になっていると思うので手順は簡単です。

FileZillaに秘密鍵を設定する

SFTP で使用する SSH の秘密鍵をFileZillaに設定します。

FileZillaの「設定」-「SFTP」- 「鍵ファイルの追加」を選択します。

FileZilla Setting(設定)

ここで選択する鍵ファイルは、xxx ユーザーの秘密鍵です。

すると下記のように、FileZillaに対応する鍵ファイルに変換するようにダイアログが出るので、「はい」をクリックします。

RSA Changed by FileZilla(鍵ファイルの変換)

変換後のファイル名に使用される「パスワード」を入力します。ここで設定するパスワードはid_rsaファイルを作成した際に設定したものです。

パスワードが未設定であればこの処理はスキップされます。

SFTP Pass(パスフレーズ設定)

ファイル名をsftp_id_rsa」など元の秘密鍵とは別の名前を使用して「OK」をクリックして保存します。

FileZillaでSFTPで接続する

秘密鍵の設定が終わったので、実際に接続してみましょう。

接続に必要な入力箇所は以下の3つです。

  • ホスト – サーバーのIPアドレス(前回の記事参照)
  • ユーザー名 – 前回作成したユーザー名
  • ポート – SSHのポート番号(ここでは 22番)
Input SFTP information(接続に必要な情報を入力)

入力ができたら「クイック接続」をクリックして接続を開始します。

ログに "/home/xxx" のディレクトリ リストの表示成功 と表示されて、サーバー内のディレクトリが右側に表示されれば成功です。

あとは左側のローカルサイトから右側のリモートサイト転送したいファイルやディレクトリをドラッグ・アンド・ドロップするだけです。

最後に

ファイルをサーバーに転送する手段にも色々な方法や仕組みがあります。

環境によっては、ファイルをアップロードするユーザーを新たに作成して、アクセスできるディレクトリを制限したい場合などもあると思います。

どの手段を選択するかは環境によって変わってくると思いますが、適切な選択ができるようにしたいですね。