今さら聞けないSSHとFTP【入門】特徴と使い分け
インターネットやITの分野でサーバーを操作したり、ファイルをやり取りしたりする際に、避けて通れない技術がいくつかあります。その中でも特に頻繁に登場するのが「SSH」と「FTP」です。これらの言葉を耳にしたことはあっても、「結局何が違うの?」「どう使い分けるのが正解?」と疑問に思っている方もいるかもしれません。あるいは、もしかしたら「なんとなく使っているけど、仕組みはよく知らない」という方もいるかもしれませんね。
まさにこの記事は、そんな「今さら聞けない」と思っているあなたのための入門ガイドです。SSHとFTP、そしてそれに関連するプロトコル(SFTP、SCP、FTPS)について、それぞれの基本的な仕組みから、特徴、そして現代における適切な使い分けまでを、初心者の方にも分かりやすく、かつ詳細に解説していきます。
この記事を読めば、あなたはSSHとFTPの基本をしっかりと理解し、なぜSSHが重要なのか、そしてファイルを安全に転送するためにはどのプロトコルを選ぶべきなのかを自信を持って判断できるようになるはずです。
さあ、一緒にSSHとFTPの世界を深く探求していきましょう。
第1章:なぜ今、SSHとFTPなのか? – 基本プロトコルの重要性
インターネットは、様々な「プロトコル」(通信規約)の上に成り立っています。Webサイトを見るためのHTTP/HTTPS、メールを送受信するためのSMTP/POP/IMAPなど、私たちは普段意識せずとも、これらのプロトコルのお世話になっています。
SSHとFTPも、インターネット上で非常に基本的な役割を果たすプロトコルです。
- SSH (Secure Shell): 主にリモートにあるコンピューター(サーバーなど)に安全に接続し、操作するためのプロトコルです。サーバーを管理したり、プログラムをデプロイしたり、リモートで開発作業を行ったりする際に不可欠です。
- FTP (File Transfer Protocol): 主にコンピューター間でファイルを転送するためのプロトコルです。古くから利用されており、Webサイトのファイルをサーバーにアップロードするなどの用途で使われてきました。
これらのプロトコルは、インターネットの黎明期から存在するものもあれば、より現代的なセキュリティ要件を満たすために開発されたものもあります。技術は常に進化していますが、これらの基本的なプロトコルを理解することは、ネットワークやサーバーに関する様々な技術を学ぶ上での土台となります。
特に近年は、セキュリティの重要性が叫ばれており、情報の漏洩は深刻な問題につながります。SSHは「セキュア」の名前が示す通り、通信内容が暗号化される安全なプロトコルですが、FTPはそうではありません。このセキュリティに関する決定的な違いこそが、現代においてこれらのプロトコルを適切に使い分ける上で最も重要なポイントとなります。
この記事では、それぞれのプロトコルの詳細な仕組み、利点、欠点を比較し、どのような状況でどちらを使うべきなのかを明確にしていきます。「今さら聞けない」と恥ずかしがる必要はありません。基本をしっかりと学ぶことが、確かな知識を身につけるための第一歩です。
第2章:SSHを徹底解剖する – 安全なリモート操作の要
さて、まずはSSHについて深く掘り下げていきましょう。
2.1. SSHとは? – Secure Shellの基本概念
SSHは「Secure Shell」の略で、ネットワークを介して別のコンピューターに安全に接続し、コマンドを実行したり、ファイルを転送したりするためのプロトコルです。最大の特徴は、クライアント(操作する側のコンピューター)とサーバー(操作される側のコンピューター)間の通信が強力に暗号化される点です。
SSHが登場する以前は、Telnetやrloginといったプロトコルがリモートログインに使われていました。しかし、これらのプロトコルは通信内容を暗号化しないため、ネットワーク上を流れるデータが盗聴される危険性がありました。特に、ログイン時のユーザー名やパスワードが平文(暗号化されていない読める状態)で流れてしまうのは非常に危険です。
そこで、これらのセキュリティ上の問題を解決するために開発されたのがSSHです。SSHは、暗号化技術を用いることで、通信内容が第三者に盗聴されたり改ざんされたりするのを防ぎ、安全なリモート接続を実現します。
2.2. SSHの歴史と開発背景
SSHは1995年にフィンランドのTatu Ylönen氏によって開発されました。初期バージョン(SSH-1)はすぐに普及しましたが、いくつかのセキュリティ上の欠陥が見つかったため、より安全なバージョン(SSH-2)が開発され、現在主流となっているのはこのSSH-2です。
SSHの開発は、まさに既存のリモート接続プロトコルであるTelnetなどのセキュリティ問題を克服することに焦点を当てていました。オープンソースで開発されたこともあり、多くのプラットフォームで利用できる標準的な技術として広く普及しました。
2.3. SSHの主な機能
SSHは単なるリモートログインツールではありません。その多機能性もSSHの大きな特徴です。
- リモートログインとコマンド実行: これがSSHの最も基本的な機能です。SSHクライアントを使ってSSHサーバーに接続し、サーバー上で直接コマンドを実行できます。まるで目の前にサーバーがあるかのように操作できます。
- 安全なファイル転送(SFTP/SCP): SSHプロトコル上で動作するファイル転送機能として、SFTP (SSH File Transfer Protocol) や SCP (Secure Copy Protocol) があります。これらは後述しますが、SSHの安全なチャネルを利用してファイルを暗号化して転送できます。
- ポートフォワーディング (SSHトンネル): SSH接続を介して、他のプロトコルの通信を安全に転送する機能です。ローカルポートフォワーディング、リモートポートフォワーディング、ダイナミックポートフォワーディングといった種類があり、例えば社内ネットワーク内の特定のサービスに安全にアクセスしたり、VPNのように利用したりすることが可能です。
- X11フォワーディング: リモートサーバー上のGUIアプリケーションを、ローカルコンピューターの画面に表示する機能です。サーバー側にGUI環境があり、かつクライアント側も対応している必要があります。
これらの機能により、SSHはサーバー管理、ネットワークセキュリティ、リモート開発など、幅広い用途で利用されています。
2.4. SSHの仕組み – クライアント・サーバーモデルと暗号化・認証
SSHは「クライアント・サーバーモデル」で動作します。
- SSHサーバー: リモート操作を受け付ける側のコンピューターで、SSHサーバーソフトウェア(例: OpenSSHサーバー)が常駐しています。デフォルトではTCPポート22番で接続要求を待ち受けます。
- SSHクライアント: リモート操作を行う側のコンピューターで、SSHクライアントソフトウェア(例: OpenSSHクライアント、PuTTY、Tera Term)を使ってサーバーに接続します。
接続が確立されるまでの基本的な流れは以下のようになります。
- 接続の開始: クライアントがサーバーのTCPポート22番(または設定された別のポート)に接続要求を送ります。
- プロトコルバージョンの交換: クライアントとサーバーは互いにサポートするSSHプロトコルバージョン(SSH-1またはSSH-2)を通知し、共通のバージョンを選択します。現在ではSSH-2が一般的です。
- 鍵交換 (Key Exchange): ここがSSHの最も重要な部分の一つです。クライアントとサーバーは、Diffie-Hellman鍵交換などのアルゴリズムを用いて、これから行う通信を暗号化するための共通の秘密鍵を生成します。この鍵交換プロセスは盗聴者に対して安全に行われます。生成された秘密鍵は、セッションが終了するまで通信の暗号化・復号に使われます。
- サーバー認証: クライアントは、サーバーが本物であることを確認するためにサーバー認証を行います。これは通常、サーバーが持つ公開鍵を用いて行われます。クライアントは初めて接続するサーバーの場合、サーバーの公開鍵のフィンガープリント(指紋)を確認するように求められます。一度接続したことがあるサーバーの場合、前回の接続時に保存した公開鍵と今回提示された公開鍵を比較し、鍵が変わっていないか(中間者攻撃を受けていないか)を確認します。
- ユーザー認証: サーバーは接続してきたクライアントのユーザーが、そのアカウントに接続する権限があるかを確認します。主な認証方法には以下の2つがあります。
- パスワード認証: ユーザー名とパスワードを入力して認証を行う方法です。手軽ですが、推測されやすいパスワードを使っていたり、ブルートフォース攻撃(総当たり攻撃)を受けたりするリスクがあります。ただし、SSHの場合はパスワード自体は暗号化された通信路を流れるため、Telnetのように平文で盗聴される心配はありません。
- 公開鍵認証: クライアント側で事前に生成した公開鍵と秘密鍵のペアを使用する方法です。クライアントはサーバーに自分の公開鍵を登録しておきます。認証時には、サーバーはクライアントに対して秘密鍵を持っていることを証明するよう要求します。クライアントは秘密鍵を使って署名を行い、サーバーはその署名を登録済みの公開鍵で検証します。この方法ではパスワードをネットワーク上に流す必要がなく、パスワード認証よりもはるかに安全とされています。パスワード認証を無効化し、公開鍵認証のみを受け付けるように設定するのがセキュリティ上の推奨事項です。
- セッション確立: 認証が成功すると、安全な暗号化された通信チャネル(セッション)が確立され、クライアントはサーバー上でコマンドを実行したり、ファイルを転送したりできるようになります。
2.5. SSHの利用例
SSHはITの現場で非常に幅広く活用されています。
- サーバー管理: リモートにあるLinuxサーバーやUNIXサーバーに接続し、システムの設定変更、ソフトウェアのインストール、ログの確認、プロセスの管理など、あらゆるサーバー管理作業を行います。
- リモート開発: サーバー上に開発環境を構築し、ローカルPCからSSHで接続してコードを編集したり、プログラムをビルド・実行したりします。
- バージョン管理システムの利用: Gitなどのバージョン管理システムは、SSHプロトコルを使用してリモートリポジトリとの通信(push/pullなど)を行うことができます。特にGitHubやGitLabなどのホスティングサービスでは、公開鍵認証を利用したSSH接続が一般的です。
- ネットワークデバイスの管理: ルーターやスイッチなどのネットワーク機器も、SSHで接続して設定を行うのが一般的です。
- 安全なファイル転送: SFTPやSCPを使って、ローカルPCとサーバー間でファイルを安全にやり取りします。Webサイトのファイルをサーバーにアップロードしたり、サーバーからログファイルをダウンロードしたりする際に利用します。
- データベースへの安全な接続: データベースサーバーが外部からの直接接続を許可していない場合でも、SSHポートフォワーディングを利用してローカルPCから安全に接続することができます。
2.6. SSHの利点と欠点
利点:
- 高いセキュリティ: 通信全体が強力に暗号化されており、盗聴や改ざんのリスクが非常に低い。特に認証情報の保護が強力。
- 多機能性: リモートコマンド実行、安全なファイル転送(SFTP/SCP)、ポートフォワーディングなど、幅広い機能を持つ。
- 柔軟な認証方法: パスワード認証に加えて、より安全な公開鍵認証を利用できる。
- 広く普及している: ほとんどのOS(Linux, macOS, Windows)で標準または標準的なツールとして利用可能。
欠点:
- 設定の複雑さ: 特に公開鍵認証の設定や、ポートフォワーディングの設定などは初心者には少し難しく感じることがある。
- GUI操作には不向き: 基本的にはCUI(コマンドラインインターフェース)での操作が主となる(X11フォワーディングを除く)。
- デフォルトポート(22番)への攻撃: 広く知られたデフォルトポートを狙った不正アクセス(総当たり攻撃など)の対象になりやすい(適切な対策は可能)。
第3章:FTPを徹底解剖する – 古参のファイル転送プロトコル
次に、FTPについて詳しく見ていきましょう。
3.1. FTPとは? – File Transfer Protocolの基本概念
FTPは「File Transfer Protocol」の略で、その名の通り、ネットワークを介してコンピューター間でファイルを転送するために設計されたプロトコルです。インターネットがまだ広く普及していなかった時代から使われている非常に歴史のあるプロトコルの一つです。
FTPの目的はシンプルで、クライアントとサーバーの間でファイルをアップロードしたりダウンロードしたりすることです。Webサイトの構築や、大容量ファイルの共有などによく利用されてきました。
3.2. FTPの歴史と開発背景
FTPは1971年に最初の仕様(RFC 114)が公開され、その後改良が重ねられました。インターネットの初期段階であるARPANETの時代から存在しており、インターネットが一般に普及する前からファイル転送の標準として利用されていました。
当時はセキュリティに対する意識が現代ほど高くなく、インターネットも現在のように悪意のあるユーザーが多数存在する環境ではなかったため、FTPはシンプルさと効率性を重視して設計されました。しかし、その設計思想ゆえに、現代のセキュリティ基準から見ると多くの問題を抱えています。
3.3. FTPの主な機能
FTPはファイル転送に特化したプロトコルです。
- ファイルのアップロード: クライアントからサーバーへファイルを送信します。
- ファイルのダウンロード: サーバーからクライアントへファイルを受信します。
- ディレクトリの作成・削除: サーバー上に新しいディレクトリを作成したり、既存のディレクトリを削除したりします。
- ファイルやディレクトリの名前変更・削除: サーバー上のファイルやディレクトリの名前を変更したり、削除したりします。
- ディレクトリ一覧の取得: サーバー上の特定のディレクトリに含まれるファイルやサブディレクトリの一覧を取得します。
3.4. FTPの仕組み – 制御コネクションとデータコネクション、アクティブモードとパッシブモード
FTPもSSHと同様に「クライアント・サーバーモデル」で動作しますが、SSHとは異なる独特の仕組みを持っています。
FTPの最大の特徴は、制御用とデータ転送用の2つのコネクションを使用することです。
- 制御コネクション: クライアントがサーバーのTCPポート21番(デフォルト)に接続して確立されます。このコネクションは、コマンド(例: ログイン、ファイル一覧表示、アップロード/ダウンロードの開始要求など)とサーバーからの応答をやり取りするために使用されます。このコネクションはセッション中ずっと確立されたままです。
- データコネクション: ファイルの実際の転送(アップロードまたはダウンロード)やディレクトリ一覧の送信を行うために、ファイル転送要求があるたびに別途確立されるコネクションです。ファイル転送が完了すると、このコネクションは閉じられます。
このデータコネクションの確立方法には、さらに「アクティブモード」と「パッシブモード」の2種類があります。
-
アクティブモード (Active Mode):
- クライアントは制御コネクション上で「PASV」のようなデータ転送開始コマンドではなく、「PORT」コマンドと共に、クライアント側がデータを受け付けるためのポート番号をサーバーに通知します。
- サーバーは、その通知されたクライアント側のポートに対して、サーバー側のポート20番からサーバー側がクライアントに対して接続を開始します。
- 問題点: サーバーがクライアントに接続を開始するため、クライアント側のファイアウォールで外部からの着信接続を許可しておく必要があります。これはセキュリティ上のリスクとなるため、現代のネットワーク環境では一般的に利用されにくくなっています。
-
パッシブモード (Passive Mode):
- クライアントは制御コネクション上で「PASV」コマンドをサーバーに送信します。
- サーバーは、データ転送に使用するランダムなポート番号をクライアントに通知します。
- クライアントは、その通知されたサーバー側のポートに対して、クライアント側からサーバーへ接続を開始します。
- 利点: クライアント側はサーバーへの発信接続を許可するだけで済むため、クライアント側のファイアウォールの設定が比較的容易です。現代ではパッシブモードが主流となっています。
- 問題点: サーバー側は多くのランダムなポートを開放しておく必要があるため、サーバー側のファイアウォール設定が複雑になることがあります(特定のポート範囲のみ許可するなど)。
3.5. FTPの利用例
過去には多くの場面でFTPが利用されていました。
- Webサイトのファイルアップロード: ホームページビルダーなどのツールから、作成したWebサイトのファイルをWebサーバーにアップロードするためによく使われました。
- 大容量ファイルの共有: ファイル配布サイトなどで、ファイルをダウンロードする手段として提供されていました。
- OSやソフトウェアの配布: OSのインストールイメージなどがFTPサイトで公開されていることがありました。
しかし、後述するセキュリティ上の問題から、現在ではFTPがそのまま使われる機会は減少し、より安全なプロトコルへの移行が進んでいます。
3.6. FTPの利点と欠点
利点:
- シンプルさ: ファイル転送という機能に特化しており、プロトコル自体は比較的シンプルです。
- 広く普及している: 古くから存在するため、多くのOSやツールがFTPクライアント/サーバー機能を標準でサポートしています。
- データコネクションの分離: 制御とデータのコネクションが分かれているため、理論的には大きなファイルを転送している最中でも、制御コネクションを使って他のコマンドを実行できる可能性はあります(ただし実装による)。
欠点:
- 致命的なセキュリティ問題:
- 通信が暗号化されない: 制御コネクションもデータコネクションも、原則として通信内容が暗号化されません。ユーザー名、パスワード、ファイル名、ファイルの内容など、すべての情報がネットワーク上を平文で流れます。これは盗聴者にとって非常に容易に情報を取得できることを意味します。
- 中間者攻撃に弱い: 制御コネクションとデータコネクションが分離している仕組みが、中間者攻撃のリスクを高めることがあります。
- ファイアウォールとの相性問題: 特にアクティブモードは、クライアント側のファイアウォール設定が複雑になる原因となります。パッシブモードでも、サーバー側で多くのポートを開放する必要がある場合があります。
第4章:FTPを安全にする試みとSSHベースのファイル転送 – SFTP, SCP, FTPS
FTPの抱えるセキュリティ問題を解決するために、いくつかの代替または拡張プロトコルが登場しました。SSHベースのファイル転送プロトコルであるSFTPとSCP、そしてFTP自体を拡張したFTPSです。これらを理解することが、現代における適切なファイル転送プロトコルを選択する上で非常に重要です。
4.1. SFTP (SSH File Transfer Protocol)
SFTPは「SSH File Transfer Protocol」の略です。これは、SSHプロトコル上で動作するファイル転送プロトコルです。FTPとは全く異なるプロトコルですが、ユーザーにとってはFTPに似た感覚でファイル操作ができるように設計されています。
- 仕組み: SFTPは、SSHによって確立された安全な暗号化通信チャネルをそのまま利用して、ファイルのアップロード、ダウンロード、削除、ディレクトリ作成といった操作を行います。SSHと同じく、デフォルトではTCPポート22番を使用します(SSH接続確立後)。
-
特徴:
- 高いセキュリティ: SSHの暗号化と認証を利用するため、通信内容が盗聴されたり改ざんされたりするリスクが非常に低い。認証情報(パスワードや公開鍵)も安全に扱われます。
- 単一コネクション: SSHと同じく、1つのコネクション(SSHセッション)内で制御とデータ転送の両方を行います。これはFTPの2つのコネクションとは異なる点です。
- 豊富なファイル操作機能: 単なる転送だけでなく、ファイルの属性変更(パーミッションなど)、シンボリックリンクの作成など、FTPよりも高機能なファイルシステム操作が可能です。
- ファイアウォールに優しい: SSHのポート(通常22番)だけを開放すれば良いため、ファイアウォール設定が比較的シンプルです。
-
FTPとの違い:
- セキュリティ: 最大の違いはセキュリティです。SFTPはSSHのセキュリティを利用するのに対し、FTPは基本的に無保護です。
- プロトコル: SFTPはSSHプロトコルファミリーの一部であり、FTPとは根本的に異なる独立したプロトコルです。
- コネクション数: SFTPは単一のコネクション、FTPは制御とデータの2つのコネクションを使用します。
- ポート番号: SFTPはデフォルト22番(SSHと同じ)、FTPはデフォルト21番(制御用)およびデータ転送用のポートを使用します。
-
利用例:
- Webサイトのファイルを安全にサーバーにアップロード・管理する。
- 重要な設定ファイルやログファイルをサーバーから安全にダウンロードする。
- 機密性の高いファイルをパートナー企業と安全に共有する。
- サーバー上で開発されたプログラムや成果物を安全にダウンロードする。
現代において、特別な理由がない限り、FTPの代わりにSFTPを使用することが強く推奨されています。
4.2. SCP (Secure Copy Protocol)
SCPは「Secure Copy Protocol」の略で、これもSSHプロトコル上で動作するファイルコピープロトコルです。主にコマンドラインからのファイルコピーに特化しています。
- 仕組み: SCPは、SSHによって確立された安全な通信チャネルを利用して、ローカルとリモート間、またはリモートとリモート間でファイルをコピーします。SSHと同じく、デフォルトではTCPポート22番を使用します。
-
特徴:
- 高いセキュリティ: SSHの暗号化と認証を利用するため、通信内容が安全です。
- シンプルさ: ファイルやディレクトリをコピーすることに特化しており、SFTPのような多機能なファイル操作(属性変更など)はできません。
- 高速性: SFTPに比べてプロトコルがシンプルであるため、ファイルのコピーにおいてはSFTPよりも高速になる場合があります(特にネットワーク条件が悪い場合や、非常に多数の小さなファイルを転送する場合など)。ただし、これは実装や状況によります。
- 単一コネクション: SFTPと同様、SSHセッション内の単一コネクションを利用します。
-
SFTPとの違い:
- 機能: SCPはファイルコピーに特化しているのに対し、SFTPはより高機能なファイルシステム操作(一覧表示、削除、名前変更、属性変更など)が可能です。
- 実装: SCPはSSHプロトコルを利用したコピー処理ですが、SFTPはSSHサブシステムとして実装されるファイル転送プロトコルです。内部的なプロトコルメッセージの構造などが異なります。
- 使い分け: コマンドラインでシンプルにファイルやディレクトリをコピーしたい場合はSCPが便利です。GUIクライアントでファイル一覧を見ながら操作したり、属性変更などコピー以外の操作も頻繁に行ったりする場合はSFTPの方が向いています。
-
利用例:
- ローカルPCのファイルをコマンド一つでサーバーにアップロードする。
- サーバーの特定のファイルをコマンド一つでローカルPCにダウンロードする。
- あるサーバーから別のサーバーへファイルを直接コピーする(SSHエージェントフォワーディングなどを利用する場合)。
4.3. FTPS (FTP over SSL/TLS)
FTPSは「FTP over SSL/TLS」の略です。これは、既存のFTPプロトコルにSSL/TLSによる暗号化を追加したものです。FTPのセキュリティ問題を解決するために考案されました。
- 仕組み: FTPの制御コネクションとデータコネクションの両方、または片方をSSL/TLSで暗号化します。SSL/TLSはWebサイトでHTTPSが使っているのと同じ暗号化技術です。
- モード: FTPSには主に2つのモードがあります。
- Explicit (明示的): 通常のFTP制御コネクション(ポート21番)で接続を開始し、その後のコマンド(通常は
AUTH TLS
またはAUTH SSL
コマンド)でSSL/TLSによる暗号化に切り替える方式です。サーバーとクライアント双方が明示的に暗号化を要求・同意する必要があります。 - Implicit (暗黙的): 制御コネクションの確立からSSL/TLSで暗号化された状態で接続を開始する方式です。通常、制御コネクションはポート990番を使用します。このモードは初期のFTPS実装で使われましたが、現在ではExplicitモードが主流です。
- Explicit (明示的): 通常のFTP制御コネクション(ポート21番)で接続を開始し、その後のコマンド(通常は
-
特徴:
- セキュリティの向上: SSL/TLSによって通信内容(認証情報やファイルデータ)が暗号化されるため、FTPの致命的な盗聴リスクを回避できます。
- FTPベース: 基本的なコマンドや2つのコネクションを使う仕組みはFTPと同じです。
- ファイアウォールとの相性: FTPと同じく、制御コネクションとデータコネクションの両方でポートを開放する必要があり、データコネクションのポートはランダムな範囲になるため、ファイアウォール設定が複雑になる場合があります(特にパッシブモード)。
-
SFTPとの違い:
- ベースプロトコル: FTPSはFTPをSSL/TLSで「包んだ」もの(FTPプロトコルそのものは変わらない)であるのに対し、SFTPはSSHプロトコル上で動作する全く新しいファイル転送プロトコルです。
- ポート: FTPSはFTPのポート(21番/データ用、または990番)とSSL/TLSの仕組みを組み合わせるのに対し、SFTPはSSHのポート(22番)を使用します。
- 認証: FTPSはFTPのパスワード認証にSSL/TLSによるサーバー証明書認証などを組み合わせるのが一般的ですが、SFTPはSSHのパスワード認証や公開鍵認証を利用します。
- ファイアウォール: FTPのデータコネクションの仕組みを引き継ぐため、FTPSもファイアウォールとの相性に課題がある場合があります。SFTPは単一のコネクションのため、ファイアウォール設定が比較的容易です。
-
利用例:
- セキュリティが求められる環境で、既存のFTPサーバーをFTPSにアップグレードして利用する。
- FTPクライアントソフトウェアがFTPSに対応している場合。
現在では、新規に安全なファイル転送システムを構築する場合はSFTPを選択するのが一般的であり、FTPSは既存のFTPシステムをセキュリティ強化するために利用されることが多い傾向にあります。
第5章:SSH、FTP、SFTP、SCP、FTPS – 比較と適切な使い分け
ここまで、SSH、FTP、そしてそれに関連するSFTP、SCP、FTPSについて詳しく見てきました。それぞれの特徴を理解したところで、改めて比較し、現代における適切な使い分けについて考えてみましょう。
以下の表は、各プロトコルの主要な違いをまとめたものです。
特徴 | FTP | FTPS | SSH | SFTP | SCP |
---|---|---|---|---|---|
ベースプロトコル | FTP | FTP + SSL/TLS | SSH | SSH | SSH |
目的 | ファイル転送 | 安全なファイル転送 | リモート操作、安全な通信 | 安全なファイル転送 | 安全なファイルコピー |
セキュリティ | 低 (平文通信) | 中〜高 (SSL/TLS暗号化) | 高 (SSH暗号化) | 高 (SSH暗号化) | 高 (SSH暗号化) |
通信ポート | 制御: 21, データ: 任意 | 制御: 21/990, データ: 任意 | 22 (デフォルト) | 22 (デフォルト/SSH内) | 22 (デフォルト/SSH内) |
コネクション数 | 2 (制御+データ) | 2 (制御+データ) | 1 | 1 | 1 |
認証方法 | パスワード (平文) | パスワード + SSL/TLS証明書 | パスワード, 公開鍵認証 | パスワード, 公開鍵認証 | パスワード, 公開鍵認証 |
機能 | ファイル転送、管理 | ファイル転送、管理 | リモートコマンド、PF他 | ファイル転送、高度な管理 | ファイル/ディレクトリコピー |
ファイアウォール | 問題あり (データコネクション) | 問題あり (データコネクション) | 比較的容易 | 比較的容易 | 比較的容易 |
現代での推奨度 | 非推奨 | 条件付き推奨 (既存システム) | 強く推奨 | 強く推奨 | 条件付き推奨 (コマンド操作) |
5.1. セキュリティの観点からの使い分け
- FTP: 絶対に避けるべきです。認証情報やファイルデータが平文で流れるため、盗聴されるリスクが高すぎます。インターネット経由でのFTPの使用は、機密情報や個人情報の漏洩に直結する可能性があります。社内LANなど限定された安全なネットワーク内でのみ利用が検討されることがありますが、それでもより安全な代替手段を使うのが無難です。
- FTPS: FTPにSSL/TLSで暗号化を追加したことで、通信経路上の盗聴リスクを大幅に低減できます。ただし、プロトコル自体の複雑さ(特にファイアウォール関連)や、FTPの仕組みを引き継いでいることによる潜在的な問題がないわけではありません。既存のFTPサーバーをセキュリティ強化したい場合や、クライアントがFTPSのみに対応している場合に選択肢となりますが、新規構築では後述のSFTPが優先されることが多いです。
- SSH: リモート操作を行う上で、現代ではほぼ必須のプロトコルです。SSHが提供する強力な暗号化と認証(特に公開鍵認証)により、安全にサーバーを管理できます。リモートでコマンドを実行したり、サーバーの設定を変更したりする場合は、SSH以外の選択肢は考えないでください。
- SFTP: SSHの安全な通信チャネルを利用してファイルを転送するため、非常に高いセキュリティを誇ります。FTPやFTPSに比べて仕組みがシンプルでファイアウォール設定も容易なため、現代において安全なファイル転送のデファクトスタンダードと言えます。Webサイトのファイルアップロード、重要なデータのバックアップ、ファイル共有など、インターネット経由でファイルをやり取りするほとんどのケースでSFTPを選択するのが最適です。
- SCP: SCPもSSHのセキュリティを利用するため安全です。コマンドラインからのファイルコピーに特化しており、シンプルさを求める場合や自動化スクリプトなどで利用されます。SFTPとセキュリティレベルは同等と考えて差し支えありません。
結論:インターネット経由で通信を行う場合、セキュリティの観点からFTPは使用せず、SSHまたはSSHベースのSFTP/SCPを使用することを強く推奨します。ファイルを転送するならSFTP、リモートで操作するならSSH、コマンドでシンプルにコピーするならSCPと使い分けるのが一般的です。
5.2. 機能と利用シーンからの使い分け
- SSH:
- 利用シーン: リモートサーバーの管理、コマンドラインでの作業、リモート開発環境への接続、ポートフォワーディングによる安全なトンネル構築。
- 特徴: サーバーを直接操作できることが最大の機能です。ファイル転送はSFTP/SCPとして提供されます。
- FTP:
- 利用シーン: ほとんどのケースで非推奨ですが、ごく限定的な環境や、セキュリティが全く問題にならない(例えば、公開されている情報のみを扱う、かつ古いシステムとの互換性が必要な)場合に限定されます。現代のインターネット環境では推奨されません。
- 特徴: ファイル転送に特化しています。
- SFTP:
- 利用シーン: 安全なファイル転送が必要なあらゆる場面。特にGUIのFTP/SFTPクライアントを使って視覚的にファイルを操作したい場合。Webサイトのファイル管理、サーバー間のファイル同期、定期的なファイルバックアップなど。
- 特徴: 高度なファイル操作機能を持ち、GUIツールからの操作がしやすい。
- SCP:
- 利用シーン: コマンドラインから素早くファイルやディレクトリをコピーしたい場合。シェルスクリプトなどでの自動化処理。リモートのサーバー同士でファイルをコピーさせたい場合。
- 特徴: ファイルコピーに特化しておりシンプル。コマンドラインでの操作が主。
- FTPS:
- 利用シーン: 既存のFTPサーバー資産があり、それをFTPSにアップグレードして使い続けたい場合。特定のクライアントソフトウェアや環境がFTPSのみに対応している場合。
- 特徴: FTPの使い勝手を維持しつつセキュリティを向上させる。
結論:リモート操作やサーバー管理はSSH。ファイル転送は、安全性を重視するならSFTP(GUI操作や多機能性)、コマンド操作やシンプルさを重視するならSCP。FTPSは互換性や既存システムとの兼ね合いで検討する。FTPは原則使用しない。
5.3. ファイアウォール設定の観点からの比較
- SSH/SFTP/SCP: デフォルトではTCPポート22番(または設定変更されたポート)のみを開放すれば良いため、ファイアウォールの設定が比較的シンプルです。
- FTP/FTPS: 制御コネクション用のポート(FTP: 21, FTPS: 21/990)に加えて、データ転送用の多くのランダムなポートを開放する必要があるため、ファイアウォール設定が複雑になり、セキュリティリスクも高まる可能性があります。特にサーバー側でパッシブモードを有効にする場合、指定したポート範囲を開放する必要があります。
結論:ファイアウォールの設定・管理の容易さにおいても、SSHベースのプロトコル(SSH, SFTP, SCP)が有利です。
第6章:実践!SSHとFTP/SFTPクライアントの使い方
ここでは、それぞれのプロトコルを使うための基本的なツールと操作方法を見ていきましょう。
6.1. SSHクライアント
多くのOSで標準で利用できるコマンドラインツール「OpenSSH」が一般的です。Windows 10以降ではWSL(Windows Subsystem for Linux)を使うか、PowerShellやコマンドプロンプトからssh
コマンドが使えるようになっています。古いWindows環境やGUIツールを使いたい場合は「PuTTY」や「Tera Term」などが有名です。
-
コマンドライン (OpenSSH):
- 接続:
ssh [ユーザー名]@[ホスト名またはIPアドレス] -p [ポート番号]
(ポート番号がデフォルトの22なら-p 22
は省略可)- 例:
ssh user@your_server.com
- 例:
- パスワード認証の場合、パスワードの入力を求められます。
- 公開鍵認証の場合、秘密鍵が適切に設定されていればパスワード入力なしで接続できます。
- 切断: 接続中のターミナルで
exit
またはlogout
と入力してEnterキーを押します。
- 接続:
-
GUIツール (PuTTYなど):
- ホスト名(またはIPアドレス)とポート番号(通常22)を入力し、「Open」ボタンをクリックします。
- 初めて接続するサーバーの場合は、サーバーの公開鍵のフィンガープリント確認ダイアログが表示されることがあります。問題なければ承諾します。
- ユーザー名を入力し、パスワード認証ならパスワードも入力してログインします。公開鍵認証なら秘密鍵のパスフレーズ入力や、自動で認証が行われます。
6.2. FTP/SFTPクライアント
GUIでファイルを操作できるクライアントソフトウェアが多数存在します。「FileZilla」「Cyberduck」「WinSCP (Windows用)」などが有名です。これらのクライアントは通常、FTP, FTPS, SFTPの複数プロトコルに対応しています。
-
GUIクライアント (例: FileZilla):
- クライアントを起動します。
- 接続情報を入力します。
- ホスト: 接続先のサーバーのホスト名またはIPアドレス
- ユーザー名: ログインユーザー名
- パスワード: ログインパスワード(公開鍵認証の場合は秘密鍵の設定が必要)
- ポート: プロトコルに応じたポート番号 (FTP: 21, SFTP: 22, FTPS Implicit: 990, FTPS Explicit: 21)
- プロトコル: ドロップダウンメニューなどで「FTP」「SFTP」「FTPS (Explicit)」「FTPS (Implicit)」などから選択します。ここで必ず「SFTP」または「FTPS」を選択してください。
- 「接続」ボタンをクリックします。
- 接続に成功すると、クライアント画面の左右にローカルPCのファイルツリーとリモートサーバーのファイルツリーが表示されます。
- ファイルやディレクトリをドラッグ&ドロップすることで、アップロードやダウンロードが行えます。右クリックメニューから、名前変更、削除、権限変更(SFTP/FTPSの場合)などの操作も可能です。
-
コマンドライン (OpenSSHのsftp, scp):
- SFTP:
- 接続:
sftp [ユーザー名]@[ホスト名またはIPアドレス]
(SSHと同じくポート指定も可能)- 例:
sftp user@your_server.com
- 例:
- 接続に成功すると、
sftp>
プロンプトが表示されます。 - コマンド例:
ls
(リモートのファイル一覧),cd [ディレクトリ名]
(リモートのディレクトリ移動),lcd [ディレクトリ名]
(ローカルのディレクトリ移動),get [リモートファイル] [ローカルファイル]
(ダウンロード),put [ローカルファイル] [リモートファイル]
(アップロード),quit
(終了)
- 接続:
- SCP:
- ローカルからリモートへコピー:
scp [オプション] [ローカルファイル] [ユーザー名]@[ホスト名]:[リモートパス]
- 例:
scp index.html user@your_server.com:/var/www/html/
- 例:
- リモートからローカルへコピー:
scp [オプション] [ユーザー名]@[ホスト名]:[リモートファイル] [ローカルパス]
- 例:
scp user@your_server.com:/var/log/syslog ./
- 例:
- ディレクトリをコピーする場合
-r
オプションを使用します (scp -r ./my_folder user@your_server.com:/home/user/
)
- ローカルからリモートへコピー:
- SFTP:
-
コマンドライン (FTP):
- 接続:
ftp [ホスト名またはIPアドレス]
- 例:
ftp ftp.example.com
- 例:
- 接続に成功すると、ユーザー名とパスワードの入力を求められます。これらが平文で送信されることに注意してください。
- コマンド例:
ls
(リモートのファイル一覧),cd [ディレクトリ名]
(リモートのディレクトリ移動),lcd [ディレクトリ名]
(ローカルのディレクトリ移動),get [リモートファイル] [ローカルファイル]
(ダウンロード),put [ローカルファイル] [リモートファイル]
(アップロード),bye
(終了) - FTPコマンドは、SFTPコマンドと似ていますが、根本的に別のプロトコルです。
- 接続:
ポイント: GUIクライアントを使う場合、接続情報を入力する際にプロトコルとして「SFTP」を明示的に選択することが重要です。「FTP」と「SFTP」は名前が似ていますが全く異なるプロトコルなので、間違えないように注意が必要です。
第7章:SSHのセキュリティをさらに強化するには
SSHはそれ自体が安全なプロトコルですが、設定次第でさらにセキュリティを高めることができます。
- パスワード認証を無効化し、公開鍵認証のみを許可する: パスワードは推測や総当たり攻撃のリスクがありますが、公開鍵認証は秘密鍵がないと認証できないため、はるかに安全です。SSHサーバーの設定ファイル (
sshd_config
) でPasswordAuthentication no
と設定します。 - rootログインを禁止する: 直接rootユーザーでログインできると、不正アクセスされた場合にシステム全体を掌握されるリスクが高まります。一般ユーザーでログインし、必要に応じて
sudo
コマンドを使用するようにします。sshd_config
でPermitRootLogin no
と設定します。 - デフォルトのポート番号(22番)を変更する: 広く知られた22番ポートは常に攻撃の対象となっています。あまり知られていないランダムな高いポート番号に変更することで、自動化されたポートスキャンや総当たり攻撃の標的になりにくくなります。
sshd_config
でPort [新しいポート番号]
と設定します。ただし、これはあくまで「隠蔽」であり、ポートスキャンされれば発見されるため、根本的なセキュリティ対策ではありませんが、不要な攻撃トラフィックを減らす効果はあります。 - 不要なユーザーのSSHアクセスを制限する: SSHアクセスを許可するユーザーを最小限に絞ります。
sshd_config
でAllowUsers [ユーザー名1] [ユーザー名2]...
やDenyUsers
などで制限できます。 - 接続元IPアドレスを制限する: 特定のIPアドレスやネットワークからの接続のみを許可するように、ファイアウォールやTCP Wrapperなどの設定を行います。
- ブルートフォース攻撃対策ツールを導入する: Fail2banなどのツールは、連続してログインに失敗するIPアドレスからの接続を一時的または永続的にブロックすることで、総当たり攻撃を防ぎます。
- SSHのバージョンを最新に保つ: SSHプロトコルや実装ソフトウェアの脆弱性が発見されることがあるため、常に最新の状態にアップデートしておくことが重要です。
- 秘密鍵の管理を厳重に行う: 公開鍵認証で使用する秘密鍵は、パスワード以上に重要です。他人に見られないように厳重に保管し、必要であればパスフレーズを設定して保護します。
これらの対策を組み合わせることで、SSH接続の安全性をさらに高めることができます。
第8章:FTP利用のリスクと代替案の重要性
改めて強調しておきますが、現代のインターネット環境でFTPをそのまま利用することは非常に危険です。特に、認証情報や機密性の高いファイルを含む通信をFTPで行うことは、情報漏洩のリスクを著しく高めます。
- FTPの具体的なリスク:
- パスワードの盗聴: ログイン時のユーザー名とパスワードが平文でネットワーク上を流れます。悪意のある第三者はこれを簡単に傍受できます。
- ファイル内容の盗聴: アップロード/ダウンロードされるファイルの内容も平文で流れます。機密情報、個人情報、設定ファイルなどが盗聴される可能性があります。
- コマンドの盗聴と改ざん: どのファイルを操作しているかなどのコマンド情報も平文です。また、悪意のあるユーザーが通信内容を改ざんし、意図しない操作(例えば、ファイルを削除するコマンドにすり替えるなど)を行う可能性もゼロではありません(中間者攻撃)。
これらのリスクを回避するために、FTPの代替手段としてSFTPまたはFTPSを利用することが強く推奨されます。
- FTPからの移行:
- SFTPへの移行: 可能であれば、FTPサーバーとクライアントの両方をSFTP対応のものに切り替えるのが最も推奨されるアプローチです。SFTPはSSHサーバー機能の一部として提供されることが多く、多くのFTP/SFTPクライアントがSFTPに対応しています。セキュリティ、機能、ファイアウォール対応の面で優れています。
- FTPSへの移行: 既存のFTPサーバーソフトウェアがFTPSに対応している場合は、FTPSを有効にするだけでもセキュリティを大幅に向上できます。ただし、クライアントもFTPSに対応している必要があります。前述の通り、ファイアウォール設定がやや複雑になる点は考慮が必要です。
「今さら聞けない」状況から脱するためにも、もし現在FTPを使っている場合は、その危険性を理解し、SFTPやFTPSへの移行を真剣に検討してください。特にWebサイトのファイルアップロードなど、インターネット経由でFTPを使っている場合は、すぐにでもSFTPに切り替えるべきです。
第9章:まとめ – SSHとFTP、そして未来へ
この記事では、SSHとFTPという二つの重要なプロトコルについて、それぞれの基本的な仕組みから歴史、機能、そしてセキュリティ上の特徴を詳細に解説しました。また、SSHベースのSFTP/SCP、そしてFTPSといった関連プロトコルについても触れ、それぞれの違いと適切な使い分けについて掘り下げました。
重要なポイントを改めてまとめましょう。
- SSH (Secure Shell): リモートコンピューターへの安全な接続と操作のためのプロトコル。強力な暗号化と認証機能を持ち、サーバー管理やリモート開発に不可欠。ファイル転送機能はSFTP/SCPとして提供される。
- FTP (File Transfer Protocol): ファイル転送に特化した古いプロトコル。通信内容が暗号化されないという致命的なセキュリティ問題を抱えているため、インターネット経由での利用は非推奨。
- SFTP (SSH File Transfer Protocol): SSH上で動作する安全なファイル転送プロトコル。SSHのセキュリティを利用し、単一のコネクションでファイル操作と転送が可能。現代における安全なファイル転送の第一選択肢。
- SCP (Secure Copy Protocol): SSH上で動作する安全なファイルコピープロトコル。ファイルコピーに特化しておりシンプル。コマンドラインでの利用に向く。
- FTPS (FTP over SSL/TLS): FTPにSSL/TLSによる暗号化を追加したもの。FTPのセキュリティ問題を解決するが、FTPの仕組みを引き継いでおり、ファイアウォール設定などで課題がある場合がある。SFTPへの移行が難しい場合の選択肢。
現代における基本的な使い分けの推奨は以下の通りです。
- リモートでサーバーを操作する: SSH を使う。特に公開鍵認証を利用する。
- ファイルを安全に転送する(GUIで操作したい、多機能性が欲しい): SFTP を使う。
- ファイルを安全に転送する(コマンドでシンプルにコピーしたい): SCP を使う。
- ファイルを転送する(セキュリティが全く問題にならない、古いシステムとの互換性が必要): FTPS か、ごく限定的にFTPを検討する(ただしリスクを十分に理解すること)。原則としてインターネット経由でFTPは使わない。
ITの世界は常に進化していますが、これらの基本的なプロトコルの役割と違いを理解しておくことは、安全で効率的なシステム運用や開発を行う上で非常に重要です。「今さら聞けない」と思っていた疑問が解消され、自信を持ってこれらのプロトコルを使えるようになっていれば幸いです。
セキュリティは、技術の進化と共に常に意識し続けるべき課題です。今日学んだ知識を活かして、あなたのネットワーク環境やサーバーとのやり取りをより安全なものにしてください。
これで、SSHとFTP、そして関連プロトコルについての詳細な解説を終わります。最後までお読みいただき、ありがとうございました。この知識が、あなたのITジャーニーの一助となれば幸いです。