スポンサーリンク

【Ubuntu】SFTPを使ってデータのアップロードやダウンロードを行う方法

SFTPを使ってデータのアップロードやダウンロードを行う方法です。

動作検証はサーバとクライアントの両方をUbuntuで行っています。

SFTPについて

SFTP(SSH File Transfer Protocol)は、SSHによって暗号化された通信を使っている安全なファイル転送プロトコルのことです。

通信経路が暗号化されているためFTPよりセキュアにデータの転送を行うことができます。

SFTPのGUIクライアントとしては下記のソフトが有名です。

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

コメント

タイトルとURLをコピーしました