SSH File Transfer Protocol(SFTP)は、信頼性の高い上でのファイル転送やファイル管理を提供する通信プロトコルである。Internet Engineering Task Force(IETF)によって、安全なファイル転送機能を提供するためにSecure Shellバージョン2.0(SSH-2)の拡張として設計された。IETFのインターネットドラフトでは、このプロトコルはSSH-2に関連付けて説明されているが、TLS(Transport Layer Security)経由の安全なファイル転送や、VPNアプリケーションの管理情報の転送など、さまざまなアプリケーションで使用できると述べられている。 

このプロトコルは、SSHなどので実行されること、サーバが既にクライアントを認証していること、クライアントユーザのIDがプロトコルで利用可能であることを前提としている。

概要
Secure copy(SCP)がファイル転送のみが可能であるのに対して、SFTPでは、リモートファイルシステムプロトコルのようにリモートファイルに対する一連の操作が可能である。SFTPクライアントの追加機能には、中断された転送の再開、ディレクトリリスト、リモートファイルの削除がある。

SFTPはSCPと比べてできるだけプラットフォームに依存しないように設計されている。例えば、SCPではクライアントが指定したワイルドカードの拡張はサーバの実装次第であるが、SFTPの設計ではこの問題を回避できる。SCPサーバの実装はUNIXプラットフォームで行われることが多いが、SFTPサーバはほとんどのプラットフォームで利用可能である。SFTPと比較して、SCPでのファイル転送は高速である。SFTPでは、他のメカニズムのようにセッションを終了することなく、ファイル転送のみを簡単に終了できる。

SFTPは、SSH上で実行されるFTPではなく、IETF SECSHワーキンググループによってゼロから設計された新しいプロトコルである。同じ略称のSimple File Transfer Protocolと混同される場合がある。

SFTPのプロトコル自体は認証とセキュリティを提供せず、基礎となるプロトコルがこれを保護することを期待している。SFTPは、同じワーキンググループによって設計されたSSHバージョン2(SSH-2)実装のサブシステムとして最もよく使用される。ただし、SSH-1や他のデータストリームでも実行できる。SSH-1はサブシステムの概念に対応していないため、SFTPサーバをSSH-1上で実行させることはプラットフォームに依存する。SSH-1サーバに接続しようとするSFTPクライアントは、サーバ側のSFTPサーババイナリへのパスを知る必要がある。

アップロードされたファイルは、ローカル側のタイムスタンプなどの基本的な属性を引き継ぐ場合がある。これは、一般的なFTPプロトコルよりも優れている点である。

開発の歴史
IETFのワーキンググループ"Secsh"は、過去にSecure Shellバージョン2(RFC 4251)の開発を担当しており、同グループは安全なファイル転送機能の標準の拡張案を作成しようとした。インターネットドラフトが作成され、以降、逐次新しいバージョンに改訂されていった。ソフトウェア業界は、ドラフトが標準化される前の様々なバージョンで実装を開始した。開発作業が進むにつれて、Secshファイル転送プロジェクトの範囲が拡大し、ファイルアクセスとファイル管理が含まれるようになった。

最終的には、一部の委員会メンバーがSFTPを単なるファイルアクセスプロトコルあるいはファイル転送プロトコルではなく「ファイルシステムプロトコル」であると見なし、ワーキンググループの範囲を超えてSFTPの開発に当たるようになり、開発が停滞した。7年間の休止の後の2013年、バージョン3ドラフトをベースラインとして、SFTPの開発作業を再開しようとした。

バージョン02 
IETFが関与する前は、SFTPはの独自プロトコルで、1997年にSami Lehtinenの支援を受けてTatu Ylönenによって設計された.。バージョン02とバージョン3との違いは、section 10 of draft-ietf-secsh-filexfer-02のsection 10に列挙されている。

バージョン3 
IETF Secure Shell File Transferプロジェクトの立ち上げ時に、Secshワーキンググループは、SFTPの目的は、信頼できるデータストリーム上で安全なファイル転送機能を提供し、SSH-2プロトコルで使用する標準のファイル転送プロトコルにすることであると表明している。

インターネットドラフトのDraft 00 - 02では、プロトコルのバージョン3が定義されている。
 SSH File Transfer Protocol, Draft 00, January 2001
 SSH File Transfer Protocol, Draft 01, March 2001
 SSH File Transfer Protocol, Draft 02, October 2001

バージョン4 
インターネットドラフトのDraft 03 - 04では、プロトコルのバージョン4が定義されている。
 SSH File Transfer Protocol, Draft 03, October 2002
 SSH File Transfer Protocol, Draft 04, December 2002

バージョン5 
インターネットドラフトのDraft 05では、プロトコルのバージョン5が定義されている。
 SSH File Transfer Protocol, Draft 05, January 2004

バージョン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コマンドだけでなく、以下のものが存在する。
WinSCP
FileZilla
EmFTP
Cyberduck
Transmit

SFTPサーバ
FTPサーバの一部にはSFTPプロトコルを実装しているものもあるが、SFTPプロトコルへの対応は通常、SSHサーバの実装によって提供される。これは、SFTPプロトコルがデフォルトのポート22を他のSSHサービスと共有するためである。

関連項目
 
 
 Files transferred over shell protocol(FISH)
 FTPS
 :Category:FTPクライアント

脚注

外部リンク
 Chrooted SFTP with Public Key Authentication – Integrating SFTP into FreeBSD production servers using the public key cryptography approach
 User-based chrooted SFTP in GNU/Linux
 OpenSSH 
 WinSCP
 filezilla
 EmFTP

暗号化プロトコル
ファイル転送プロトコル
Secure Shell