SFTPを使った安全なファイル転送

 ファイル転送プロトコル(FTP)は、かつてコンピュータ同士でのファイル転送に最も広く用いられたプロトコルだった。しかし、FTPは認証情報およびファイルコンテンツを暗号化せずにケーブルを介して送るため、安全な通信方法とは言えない。Secure Copy(SCP)やもっとロバストなSSH File Transfer Protocol(SFTP)は、十分に暗号化されたチャネル上でデータを転送することによって、このセキュリティ上の懸念を解決している。こうした代替案を利用すれば、インターネットをはじめとするどんな信頼できないネットワーク上でもセキュアなファイル転送を行うことができる。

 SCPもSFTPも、その根底をなすプロトコルとしてSecure Shell(SSH)に頼っている。SSHは、PKI(Public Key Infrastructure)に基づく認証と暗号化を使ってコンピュータ間にセキュアで暗号化されたチャネルを確立する。SSHでは、セッションを起動するための認証データの交換とその後のデータ転送に暗号化を用いている。

 SSHのサーバおよびクライアントソフトウェアは、現在のOSの大半に備わっている。また、ほとんどのLinuxシステムでは、OpenSSHスイートの一部としてSCPやSFTPのクライアントが利用できる。SCPやSFTPだけでなく、SSHもまた、リモートシェルやGUIデスクトップのリモート接続の設定、コンピュータ間のトンネリング、セキュアなブラウジングのためのSOCKSプロキシの設定、ポート転送に適したプラットフォームとして機能する。

SCPとSFTP

 SCPの起源は、Remote Copy(RCP)にある。SCPは、FTPと違って、更新日時や参照日時、ファイルの転送モードを保存する必要があるかどうかを指定できる。またRCPとは異なり、必要に応じてパスワード入力を求めることができる。さらに、ローカルマシンとリモートホストとの間のファイルのコピーだけでなく、2台のリモートホストどうしでのファイル転送も可能だ。

 SCPは、バッチ処理用の便利なコマンドラインツールである。ただし、SCPが動作するSSH1は旧式で今後サポート予定のないバージョンのSSHなので、SSH2で動作するSFTPのような別のプロトコルを利用したほうがよいだろう。

 SFTPは本格的なファイル転送プロトコルで、リモートファイルの名前変更や削除などSCPでは処理できなかったものも含め、FTPにあるすべての操作を実現している。

 SFTPはSSHのサブシステムとして動作し、デフォルトの状態では標準のSSHポート番号22でファイル転送を行う。制御とデータトラフィックのためにポート20とポート21を開く必要があるFTPとは異なり、ファイアウォール上で複数の追加ポートを開く必要はまずない。SFTPクライアントは、大半のLinuxシステムが備えているOpenSSHスイートにsftpという名前で収められている。

 パスワードベースの認証(ただし、リモートホストがパスワードなしのSSH認証を許可していれば、パスワード入力の必要はない)を利用するときは、次のようにしてSFTPセッションを起動する。

sftp david@192.168.1.1

 sftpからパスワードの入力が求められ、認証に成功すると、sftp> というプロンプトのシェルが現れる。いったんsftpシェルに入ってしまえば、cdlcdlschmodchgrpgetputrenamermdirといったFTPで使えるコマンドが同じように実行できる。セッションを終了するには、プロンプトの後にexitと入力すればよい。