今号では、sftp コマンドを使ったファイル転送の方法について説明します!
sftp とは
sftp とは SSH File Transfer Protocol の略であり、暗号化された通信によって安全にファイルを送受信することができる仕組みです。
以前は ftp によるファイルの送受信が主流でしたが、通信を暗号化する仕組みがないため、内容が盗聴される可能性がありました。
そこで、すべてのデータを暗号化して送信することができる sftp が使用されることになりました。
主な用途としては、システム間でのファイルの送受信や、Web サーバへ各コンテンツ (html、css、画像ファイル) のアップロードなどがあります。
なお、今回は Linux や Windows 上のターミナルで sftp コマンドを使う前提で説明します。
基本の書式
- リモートサーバへ接続
sftp ユーザ名@ホスト名の書式で実行します。例: $ sftp ruser@172.30.10.10 ruser@172.30.10.10's password: Connected to 172.30.10.10. sftp>
※パスワード認証の場合、リモートユーザのパスワードが求められます。
- リモートサーバから切断
exit もしくは bye を実行します。例: sftp> exit
- 現在のディレクトリ (リモート側) を表示
pwd コマンドを実行します。例: sftp> pwd Remote working directory: /home/ruser
- 現在のディレクトリ (ローカル側) を表示
lpwd コマンドを実行します。例: sftp> lpwd Local working directory: /home/luser
- ファイル一覧 (リモート側) を表示
ls を実行します。例: sftp> ls 1.log 2.log 3.log dir1 dir2 ruser-file
-l オプションを付けると、各ファイルやディレクトリの詳細を表示します。
sftp> ls -l -rw-rw-r-- 1 ruser ruser 0 Nov 17 01:04 1.log -rw-rw-r-- 1 ruser ruser 0 Nov 17 01:04 2.log -rw-rw-r-- 1 ruser ruser 0 Nov 17 01:04 3.log drwxrwxr-x 2 ruser ruser 6 Nov 17 01:06 dir1 drwxrwxr-x 2 ruser ruser 6 Nov 17 01:06 dir2 -rw-rw-r-- 1 ruser ruser 0 Nov 17 01:04 ruser-file
- ファイル一覧 (ローカル側) を表示
lls を実行します。例: sftp> lls 1l.log 2l.log 3l.log local-dir luser-file
-l オプションを付けると、各ファイルやディレクトリの詳細を表示します。
sftp> lls -l total 0 -rw-r--r--. 1 luser luser 0 Nov 17 01:05 1l.log -rw-r--r--. 1 luser luser 0 Nov 17 01:05 2l.log -rw-r--r--. 1 luser luser 0 Nov 17 01:05 3l.log drwxr-xr-x. 2 luser luser 6 Nov 17 01:07 local-dir -rw-r--r--. 1 luser luser 0 Nov 17 01:05 luser-file
- ディレクトリ (リモート側) を移動
cd ディレクトリ名の書式で実行します。例: sftp> cd dir1
- ディレクトリ (ローカル側) を移動
lcd ディレクトリ名の書式で実行します。例: sftp> lcd local-dir
続いて、一番重要なファイル転送についてのコマンドです。
- ファイルのダウンロード (リモート→ローカル)
get リモート側のファイル名の書式で実行します。例: sftp> get ruser-file Fetching /home/ruser/ruser-file to ruser-file sftp> lls 1l.log 2l.log 3l.log local-dir luser-file ruser-file
リモート側のファイル名の後に任意のファイル名を付けると、そのファイル名で保存されます。
sftp> get ruser-file ruser-file.bkp Fetching /home/ruser/ruser-file to ruser-file.bkp sftp> lls 1l.log 2l.log 3l.log local-dir luser-file ruser-file.bkp
- ファイルのアップロード (ローカル→リモート)
put ローカル側のファイル名の書式で実行します。例: sftp> put luser-file Uploading luser-file to /home/ruser/luser-file luser-file 100% 0 0.0KB/s 00:00 sftp> ls 1.log 2.log 3.log dir1 dir2 luser-file ruser-file
リモート側のファイル名の後に任意のファイル名を付けると、そのファイル名で保存されます。
sftp> put luser-file luser-file.bkp Uploading luser-file to /home/ruser/luser-file.bkp luser-file 100% 0 0.0KB/s 00:00 sftp> ls 1.log 2.log 3.log dir1 dir2 luser-file.bkp
- 複数ファイルの一括ダウンロード (リモート→ローカル)
mget リモート側のファイル名パターンの書式で実行します。例: sftp> mget *.log Fetching /home/ruser/1.log to 1.log Fetching /home/ruser/2.log to 2.log Fetching /home/ruser/3.log to 3.log sftp> lls *.log 1.log 2.log 3.log
- 複数ファイルの一括アップロード (ローカル→リモート)
mput ローカル側のファイル名パターンの書式で実行します。例: sftp> mput *.log Uploading 1l.log to /home/ruser/1l.log 1l.log 100% 0 0.0KB/s 00:00 Uploading 2l.log to /home/ruser/2l.log 2l.log 100% 0 0.0KB/s 00:00 Uploading 3l.log to /home/ruser/3l.log 3l.log 100% 0 0.0KB/s 00:00 sftp> ls *.log 1l.log 2l.log 3l.log
sftp コマンドのオプション
sftp コマンドの基本的なオプションをご説明します。
※すべてのオプションはご紹介せず、よく使用されると考えられるものを抜粋しています。
- -i 秘密鍵のファイル
公開鍵認証で接続する場合、-i の後に使用する秘密鍵のファイルを指定します。$ sftp -i ~/.ssh/id_rsa ruser@172.30.10.10
- -P ポート番号
SSH/SFTP が 22番ポート (デフォルト) 以外で動作している場合、該当するポート番号を指定します。$ sftp -P 10022 ruser@172.30.10.10
- -v
接続時の詳細なデバッグ情報を表示します。
なお、このオプションには 3段階あり、-vv にするとさらに詳細なデバッグ情報が、-vvv にすると最も詳細なデバッグ情報が表示されます。$ sftp -v ruser@172.30.10.10
次号について
次号では、sftp と同じくファイル転送を担う rsync についてご紹介します!
