SFTP(SSH
File Transfer Protocol)は、信頼性の高いデータストリーム上での
ファイル転送と管理を目的とした
通信プロトコルです。IETF(
Internet Engineering Task Force)によって、SSH-2(
Secure Shell version 2.0)の拡張として設計され、安全な
ファイル転送機能を提供します。このプロトコルは、SSH-2に関連付けられていますが、TLS(
Transport Layer Security)経由の安全な
ファイル転送や、VPNアプリケーションの管理情報の転送など、さまざまな場面での利用が可能です。
SFTPの概要
SFTPは、セキュアな通信路、例えばSSH上で動作することを前提としています。サーバは既にクライアントを認証済みであり、クライアントユーザのIDがプロトコル内で利用可能であることが前提となります。SCP(Secure Copy)が
ファイル転送のみに限定されるのに対し、SFTPはリモート
ファイルシステムのように、リモートファイルに対する一連の操作が可能です。例えば、中断された転送の再開、ディレクトリリストの取得、リモートファイルの削除など、より高度な操作がSFTPクライアントによって実現できます。
SFTPはプラットフォームに依存しないように設計されており、SCPのようにサーバの実装に依存するワイルドカードの拡張問題を回避できます。SCPサーバはUNIXプラットフォームで実装されることが多いのに対し、SFTPサーバは多くのプラットフォームで利用可能です。ただし、
ファイル転送速度においては、SCPの方がSFTPよりも高速な場合があります。また、SFTPでは
ファイル転送だけを容易に終了でき、セッション全体を終了する必要はありません。
SFTPは、SSH上で動作するFTPではなく、IETF SECSHワーキンググループによってゼロから設計された新しいプロトコルです。同じ略称のSimple
File Transfer Protocolと混同しないように注意が必要です。
SFTPプロトコル自体は、認証やセキュリティ機能を提供せず、基盤となるプロトコルがそれらを保護することを前提としています。そのため、SFTPは同じワーキンググループによって設計されたSSH-2実装のサブシステムとして利用されることが一般的です。SSH-1や他のデータストリームでも実行可能ですが、SSH-1ではサブシステムの概念がないため、SFTPサーバの実行はプラットフォームに依存します。また、SSH-1サーバに接続するSFTPクライアントは、サーバ側のSFTPサーババイナリへのパスを把握している必要があります。
アップロードされるファイルは、ローカル側のタイムスタンプなどの基本的な属性を引き継ぐ場合があり、これは一般的なFTPプロトコルよりも優れた点です。
開発の歴史
IETFのワーキンググループ"Secsh"は、SSH-2(RFC 4251)の開発を担当しました。その後、同グループは安全な
ファイル転送機能の標準拡張案を作成し、
インターネットドラフトが作成されました。ドラフトは改訂を重ね、ソフトウェア業界は標準化前の様々なバージョンで実装を開始しました。開発が進むにつれて、Secsh
ファイル転送プロジェクトの範囲は拡大し、ファイルアクセスやファイル管理も含むようになりました。
しかし、一部の委員会メンバーがSFTPを単なる
ファイル転送プロトコルではなく、「
ファイルシステムプロトコル」と見なしたことから、ワーキンググループの範囲を超えた開発が行われ、SFTPの開発は停滞しました。7年間の休止を経て、2013年にバージョン3のドラフトをベースラインとして、SFTPの開発が再開されました。
バージョン0〜2
IETFが関与する以前、SFTPはSSH Communications Securityの独自プロトコルであり、1997年にTatu Ylönen氏によって設計されました。バージョン0〜2とバージョン3の違いは、draft-ietf-secsh-filexfer-02のセクション10に詳しく記載されています。
バージョン3
IETF
Secure Shell File Transferプロジェクトの立ち上げ時に、SecshワーキンググループはSFTPの目的を、信頼できるデータストリーム上での安全な
ファイル転送機能の提供と、SSH-2プロトコルで使用する標準
ファイル転送プロトコルにすることと定義しました。
インターネットドラフトのDraft 00〜02では、プロトコルのバージョン3が定義されています。
バージョン4
インターネットドラフトのDraft 03〜04では、プロトコルのバージョン4が定義されています。
バージョン5
インターネットドラフトのDraft 05では、プロトコルのバージョン5が定義されています。
バージョン6
インターネットドラフトのDraft 06〜13では、プロトコルのバージョン6が定義されています。
- - SSH File Transfer Protocol, Draft 06, October 2004
- - SSH File Transfer Protocol, Draft 07, March 2005
- - SSH File Transfer Protocol, Draft 08, April 2005
- - SSH File Transfer Protocol, Draft 09, June 2005
- - SSH File Transfer Protocol, Draft 10, June 2005
- - SSH File Transfer Protocol, Draft 11, January 2006
- - SSH File Transfer Protocol, Draft 12, January 2006
- - SSH File Transfer Protocol, Draft 13, July 2006
ソフトウェア
SFTPクライアント
"SFTP (sftp)"という言葉は、プロトコルのクライアント部分を実装するコマンドラインプログラムを指す場合もあります。例えば、OpenSSHには、サブシステムとしてsftpコマンドが含まれています。また、scpクライアントの一部には、サーバが対応しているプロトコルに応じて、SFTPとSCPの両方で
ファイル転送を行う機能があります。
SFTPを利用できるアプリケーションには、コマンドライン形式のsftpコマンドに加えて、以下のGUIクライアントがあります。
- - WinSCP
- - FileZilla
- - EmFTP
- - Cyberduck
- - Transmit
SFTPサーバ
FTPサーバの一部にはSFTPプロトコルを実装しているものもありますが、SFTPプロトコルへの対応は通常、SSHサーバの実装によって提供されます。これは、SFTPプロトコルがデフォルトポート22を他のSSHサービスと共有するためです。
関連項目
- - SSHクライアントの比較
- - SSHサーバの比較
- - Files transferred over shell protocol (FISH)
- - FTPS
- - Category: FTPクライアント
脚注
外部リンク