SFTPを使ってデータのアップロードやダウンロードを行う方法です。
動作検証はサーバとクライアントの両方をUbuntuで行っています。
SFTPについて
SFTP(SSH File Transfer Protocol)は、SSHによって暗号化された通信を使っている安全なファイル転送プロトコルのことです。
通信経路が暗号化されているためFTPよりセキュアにデータの転送を行うことができます。
SFTPのGUIクライアントとしては下記のソフトが有名です。
- FileZilla https://filezilla-project.org/
- WinSCP https://winscp.net/eng/docs/lang:jp
SFTPの使い方
今回はCUI(コマンド)によるSFTPの基本的な操作方法について説明をします。
サーバへの接続方法
SFTPでサーバへ接続する方法です。
sftp ユーザ@接続先サーバ
SSHの接続に秘密鍵が必要な場合や、接続するポート番号を22番ポートから変更している際には、以下のオプションを使用します。
- -i 秘密鍵
- -P ポート番号
sftp -i 秘密鍵 -P ポート番号 ユーザ@接続先サーバ
コマンド説明
SFTPで普段使いそうなコマンドについて説明をします。
操作内容 | コマンド |
---|---|
ファイル一覧表示 |
ls 下記オプションも使用可能 -l (詳細情報表示) -a (.付き隠しファイル表示) |
ダウンロード |
get ダウンロードデータ ディレクトリをダウンロードする場合は「-r」オプションを使用 |
アップロード |
put アップロードデータ ディレクトリをアップロードする場合は「-r」オプションを使用 |
現在のディレクトリを表示 | pwd |
ディレクトリの移動 | cd |
ディレクトリの作成 | mkdir |
クライアント側のファイル一覧表示 |
lls 下記オプションも使用可能 -l (詳細情報表示) -a (.付き隠しファイル表示) |
クライアント側のディレクトリ表示 | lpwd |
クライアント側のディレクトリの移動 | lcd |
クライアント側のディレクトリ作成 | lmkdir |
サーバから切断 | exit |
SFTPでデータをアップ・ダウンロードする際の注意点
SFTPでデータのアップ・ダウンロードを行う先に同じ名前のファイルがあった場合、警告なしの問答無用でデータを上書きしてしまいます。
必ず最初に、同じ名前のデータが存在しないかの確認を行って、意図しないデータの上書きが発生しないように注意してください。
私は以前に、自分が管理するWebサイトのコンテンツを一つまるごと消し去ってしまったことがあり、復旧にとても苦労した覚えがあります…
ファイル一覧表示 「ls」
「ls」コマンドを使用すると、サーバ側のディレクトリ内一覧を表示することができます。
sftp> ls latest-ja.tar.gz work
「-a」で「.」付きの隠しファイルも表示
「-a」オプションをつけると「.」で始まる隠しファイルも表示することができます。
sftp> ls -a . .. .bash_history .bash_logout .bashrc .cache .dotnet .lesshst .profile .ssh .sudo_as_admin_successful .viminfo .vscode-server .wget-hsts data latest-ja.tar.gz work
「-l」で詳細情報を表示
「-l」オプションを使用すると、詳細な情報も表示することができます。
sftp> ls -l -rw-rw-r-- ? tamohiko tamohiko 34001888 Jan 29 18:44 latest-ja.tar.gz drwxrwxr-x ? tamohiko tamohiko 4096 Jan 28 21:19 work
※「-a」オプションと同時に使用することもできます。
ダウンロード 「get ダウンロードデータ」
「get ダウンロードデータ」でサーバからデータをダウンロードすることができます。
ダウンロードしてくる場合は「Fetching 〜」と表示されます。
sftp> get latest-ja.tar.gz Fetching /home/tamohiko/latest-ja.tar.gz to latest-ja.tar.gz latest-ja.tar.gz 100% 32MB 2.8MB/s 00:11
ダウンロード先を指定 「get ダウンローデータ ダウンロード先パス」
クライアント側のパスを指定することで、そこにデータをダウンロードすることも出来ます。
get ダウンロードデータ クライアント側パス
「./data/backup」ディレクトリを指定してダウンロードを行ってみます。
sftp> get latest-ja.tar.gz ./data/backup/latest-ja.tar.gz Fetching /home/tamohiko/latest-ja.tar.gz to ./data/backup/latest-ja.tar.gz latest-ja.tar.gz 100% 32MB 3.1MB/s 00:10
ダウンロード時のメッセージに「Fetching /home/tamohiko/latest-ja.tar.gz to ./data/backup/latest-ja.tar.gz」と表示されているので、指定したディレクトリにデータがダウンロードされたことが分かります。
ダウンロードファイル名の変更「get ダウンローデータ ファイル名」
ファイル名指定することで、ファイル名を変更してデータをダウンロードすることも出来ます。
get ダウンローデータ ファイル名
「latest-ja.tar.gz」を「latest-ja_2.tar.gz」という名前でダウンロードしてみます。
sftp> get latest-ja.tar.gz latest-ja_2.tar.gz Fetching /home/tamohiko/latest-ja.tar.gz to latest-ja_2.tar.gz
「Fetching /home/tamohiko/latest-ja.tar.gz to latest-ja_2.tar.gz」と表示されているので、「latest-ja_2.tar.gz」頭囲名前でデータがダウンロードされたことが確認できます。
ディレクトリのダウンロードは「-r」オプションを使用
「-r」オプションを使用せずにディレクトリをダウンロードしようとすると、「not a regular file」とメッセージが表示されてダウンロードが失敗します。
sftp> get work/ Fetching /home/tamohiko/work/ to work download /home/tamohiko/work/: not a regular file
「-r」オプションをつけることで、ディレクトごとダウンロードできるようになります。
sftp> get -r work/ Fetching /home/tamohiko/work/ to work Retrieving /home/tamohiko/work Retrieving /home/tamohiko/work/sub_dir test_02.txt 100% 12 0.2KB/s 00:00 test_01.txt 100% 9 0.2KB/s 00:00
アップロード 「put アップロードデータ」
「put アップロードデータ」でサーバにデータをアップロードすることができます。
アップロードの場合は「Uploading 〜」と表示されます。
sftp> put latest-ja.tar.gz Uploading latest-ja.tar.gz to /home/tamohiko/latest-ja.tar.gz latest-ja.tar.gz 100% 32MB 5.3MB/s 00:06
アップロード先の指定とファイル名の変更
ダウンロードの項目でも説明していますが、アップロードの場合も同様にアップロード先の指定とファイル名の変更を行うことが出来ます。
put アップロードデータ アップロード先ディレクトリ put アップロードデータ アップロードファイル名
「work/backup」ディレクトリを指定してデータのアップロードを行ってみます。
「Uploading 〜」部分のメッセージで、指定したディレクトリにデータがアップロードされたことが確認できます。
sftp> put latest-ja.tar.gz work/backup/ Uploading latest-ja.tar.gz to /home/tamohiko/work/backup/latest-ja.tar.gz latest-ja.tar.gz 100% 32MB 5.0MB/s 00:06
「latest-ja.tar.gz」を「latest-ja_3.tar.gz」というファイル名に変更してアップロードを行ってみます。
「Uploading 〜」部分のメッセージで、指定したファイル名に変更されてデータがアップロードされたことが確認できます。
sftp> put latest-ja.tar.gz latest-ja_3.tar.gz Uploading latest-ja.tar.gz to /home/tamohiko/latest-ja_3.tar.gz latest-ja.tar.gz 100% 32MB 4.7MB/s 00:06
ディレクトリのアップロードは「-r」オプションを使用
ダウンロードの場合と同様に「-r」オプションを使用せずにディレクトリをアップロードしようとすると、「not a regular file」とメッセージが表示されて処理が失敗します。
sftp> put data/ Uploading data/ to /home/tamohiko/data local "data/" is not a regular file
「-r」オプションをつけることで、ディレクトごとアップロードできるようになります。
sftp> put -r data/ Uploading data/ to /home/tamohiko/data Entering data/ Entering data/backup text_00.txt_bak
カレントディレクトリを表示 「pwd」
「pwd」コマンドを実行すると、接続しているサーバのカレントディレクトリ(現在のディレクトリ)を表示することができます。
sftp> pwd Remote working directory: /home/tamohiko
「Remote working directory」と表示されているので、接続先のディレクトリであることが分かります。
ディレクトリの移動 「cd」
「cd」コマンドを実行すると、接続しているサーバでディレクトリを移動することができます。
「work」ディレクトリに「cd」で移動した後に、「pwd」を実行すると「/home/tamohiko/work」に移動したことが確認できます。
sftp> cd work/ sftp> pwd Remote working directory: /home/tamohiko/work
ディレクトリの作成 「mkdir」
「mkdir」コマンドを実行すると、接続先サーバ側でディレクトリを作成することができます。
「backup」というディレクトリ作成してみます。
sftp> mkdir backup
「ls -l」でディレクトリ内を表示すると、「backup」ディレクトリが作成されていることが確認できます。
sftp> ls -l drwxrwxr-x ? tamohiko tamohiko 4096 Jan 30 17:09 backup drwxrwxr-x ? tamohiko tamohiko 4096 Jan 30 15:19 sub_dir -rw-rw-r-- ? tamohiko tamohiko 9 Jan 30 15:18 test_01.txt
クライアント側のファイル一覧表示 「lls」
「lls」コマンドを実行すると、クライアント(ローカル)側のディレクトリ内一覧を表示させることができます。
sftp> lls data images latest-ja.tar.gz work
「lls」の頭にある「l」はlocalのlかな?
「-a」で「.」付きの隠しファイルも表示
「-a」オプションをつけると「.」で始まる隠しファイルも表示することができます。
sftp> lls -a . .. data images latest-ja.tar.gz work
「-l」で詳細情報を表示
「-l」オプションをつけると詳細な情報も表示することができます。
sftp> lls -la total 33232 drwxrwxr-x 5 tamohiko tamohiko 4096 Jan 30 17:34 . drwxr-xr-x 51 tamohiko tamohiko 4096 Jan 30 17:31 .. drwxrwxr-x 3 tamohiko tamohiko 4096 Jan 30 15:26 data drwxrwxr-x 2 tamohiko tamohiko 4096 Jan 30 17:34 images -rw-rw-r-- 1 tamohiko tamohiko 34001888 Jan 28 22:35 latest-ja.tar.gz drwxrwxr-x 3 tamohiko tamohiko 4096 Jan 30 15:24 work
クライアント側のカレントディレクトリ表示 「lpwd ディレクトリ」
「lpwd」コマンドを実行すると、クライアント(ローカル)側のカレントディレクトリを表示することができます。
sftp> lpwd Local working directory: /home/tamohiko/sftp_test
メッセージにも「Local working directory:」と表示されているので、クライアント(ローカル)側のディレクトリを表示しているということがわかります。
クライアント側のディレクトリの移動 「lcd ディレクトリ」
「lcd」コマンドを実行すると、クライアント(ローカル)側のディレクトリを移動することができます。
lcd ディレクトリ
「lcd」でクライアント側で「work」ディレクトリに移動してみます。
「lpwd」でクライアント側のカレントディレクトリを確認すると、「work」ディレクトリへ移動したことが確認できます。
sftp> lcd work/ sftp> lpwd Local working directory: /home/tamohiko/sftp_test/work
クライアント側のディレクトリ作成 「lmkdir ディレクトリ」
「lmkdir」コマンドを使うと、クライアント側で新しくディレクトリを作成することが出来ます。
lmkdir ディレクトリ
ディレクトリ作成前の状態です。
sftp> lls -l total 8 drwxrwxr-x 2 tamohiko tamohiko 4096 Jan 30 15:24 sub_dir -rw-rw-r-- 1 tamohiko tamohiko 9 Jan 30 15:24 test_01.txt
「sub_dir_01」というディレクトリをクライアント側に作成してみます。
sftp> lmkdir sub_dir_01
「lls」で確認すると、「sub_dir_01」ディレクトリが新たに作成されていることが確認できました。
sftp> lls -l total 12 drwxrwxr-x 2 tamohiko tamohiko 4096 Jan 30 15:24 sub_dir drwxrwxr-x 2 tamohiko tamohiko 4096 Jan 30 17:40 sub_dir_01 -rw-rw-r-- 1 tamohiko tamohiko 9 Jan 30 15:24 test_01.txt
サーバから切断 「exit」
SFTPで接続しているサーバから切断するには「exit」コマンドを実行します。
sftp> exit
ちなみに、「bye」でも切断することができます。
sftp> bye
コメント