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の開発作業を再開しようとした。

### バージョン0〜2

IETFが関与する前は、SFTPはSSHコミュニケーションズ・セキュリティの独自プロトコルで、1997年にSami Lehtinenの支援を受けてTatu Ylönenによって設計された.。バージョン0〜2とバージョン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サービスと共有するためである。