sftpとはSSH上で動作するファイル転送技術です。
ポートはデフォルトではsshと同じ22/TCPを使用します。
今回は通信対象サーバーとの間で予め公開鍵認証を済ませています(公開鍵認証の方法についてはこちら)。なので最初からパスワードなしでSSH接続が出来る環境になっています。
FTPについて
まずはFTPから。
“ftp” は旧式のファイル転送プロトコルで、現在はセキュリティ上、使用非推奨となっています。(デフォルトのポート番号は21)
これをSSH化してセキュリティ強化したものが “sftp” になります。
sftp接続の開始
sftpの開始の仕方です。
下記コマンドでセッションを開始します。
sftp user名@リモートホスト名

プロンプトが “sftp>” に変わりますので、コマンドを入力すると対話型に応答があります。



ファイルの転送
ファイルの転送の仕方です。
ローカル → リモートへの転送
put ファイル名

リモート → ローカルへの転送
get ファイル名
ディレクトリの転送
ディレクトリの場合はディレクトリ名に “-r” オプションを付けます。
“-r” オプションは再帰的に最下層まで繰り返しコピーという意味です。
ローカル → リモートへの転送
put -r ディレクトリ名
リモート → ローカルへの転送
get -r ディレクトリ名

終了
“exit” でsftpセッションを終了してターミナルに戻ります。

コマンド一覧
主なコマンドは以下の通り、詳細は “man sftp” にあります。
| 操作 | コマンド |
|---|---|
| リモートの場所確認 | pwd |
| ローカルの場所確認 | lpwd |
| リモート一覧 | ls |
| ローカル一覧 | lls |
| ディレクトリ移動 | cd dir |
| ローカル移動 | lcd dir |
| ファイル取得 | get file |
| ファイル送信 | put file |
| ディレクトリ取得 | get -r dir |
| ディレクトリ送信 | put -r dir |
| 終了 | exit |
ローカル側の操作は “l” を頭に付けます。
例) “ls” → “lls” 、 “cd” → “lcd”


“sftp” 内ではどんなコマンドでも使える訳ではなく、例えば “cat” などは使用できません。
参考)FTPSについて
SFTPとよく似た(語順を入れ替えただけのようにも見える)FTPSというファイル転送プロトコルがあります。
これはSFTPとは別物です。
FTPSはセキュリティ上問題のあるFTPの旧資産を、TLS技術を用いて延命させたものです。
対比表
現在ではSFTPの方が推奨されています。
| 項目 | SFTP | FTPS |
|---|---|---|
| 正式名称 | SSH File Transfer Protocol | FTP over SSL/TLS |
| ベース | SSH | FTP + TLS |
| RFC | RFC 4254 | RFC 4217 |
| 互換性 | FTPとは無関係 | FTPの拡張プロトコル |
| 使用ポート | 22/TCPのみ | 21 + 動的にポート多数使用 |
| 通信経路 | 単一セッション | 制御+データ分離 |
| FW/NAT越え | 容易 | 困難 |
| パスワード認証 | 可能 | 可能 |
| 公開鍵認証 | 標準 | なし |
| クライアント証明書 | 不要 | 必要な場合あり |
| 障害解析 | 容易 | 難しい |
| attack surface | 小 | 大 |
まとめ
“sftp” は、ローカル↔️リモート間の安全なファイル受け渡し手段です。
正確にはコマンド名というよりプロトコル名ですかね。
しかしながらターミナルからツールやコマンドと同じ感覚で起動出来、対話型で使えます。
SSH上のコピーコマンドには “scp” がありますが、これはセキュリティ上は非推奨となっており、 “sftp” の方が推奨されています。

コメント