うたカモ技術ブログ

Linux ネットワーク

Linux   いろいろなファイル転送方法(wget・curl・ftp・tftp・scp)

post: 

この記事ではwgetやcurl、ftpなどに代表される、いろいろなファイル転送について紹介します。

最近、仕事や趣味で組み込みソフトウェアの開発やWebシステムを弄ることがあり、組み込み機器やWebサーバーから ファイルをダウンロード&アップロードすることが良くあります。

慣れてくると、何も考えずに自由にファイルを出し入れできるようになってきますので、ファイル転送そのものについて意識する 機会がなくなり、いつもの方法が固定化していきます。

しかし、ハードウェア環境によっては自分が普段使っていたファイル転送ツールが使用できなかったり、ソフトウェア構成に限りがあるため、 いつも利用しているファイル転送手段(転送プロトコル)そのものが全く通用しないこともあります。

そこで、この記事では機器やソフトウェア環境が限定されるような状況でも最適な選択ができるように、いろいろなファイル転送方法を紹介したいと思います。

ファイル転送のやり方は参考文献を筆頭に様々な技術ブログやドキュメントで紹介されていますが、自分が使い方を忘れたときに見返す 目的も含め、この記事でも紹介したいと思います。

目次

  1. そもそもファイル転送とは?(アップロードとダウンロード)
  2. [HTTP] Webサーバーを利用したファイルダウンロード
    1. サーバーとクライアントの設置
    2. Webサーバーの準備(次に挙げるものをどれか1つ実施)
      1. python3による簡易Webサーバーの導入
      2. nginxの導入
      3. apacheの導入
    3. Webサーバーからファイルをダウンロードする(wget・curl・browser)
      1. wgetコマンド
      2. curlコマンド
      3. Webブラウザ
  3. [FTP] FTPコマンドを利用したファイルのダウンロード・アップロード
    1. サーバーとクライアントの設置
    2. FTPサーバーの導入
    3. FTPサーバーにログイン
    4. ファイルダウンロード
    5. ファイルアップロード
  4. [UDP] TFTPコマンドを利用したファイルのダウンロード・アップロード
    1. サーバーとクライアントの設置
    2. TFTPサーバーの導入
    3. ファイルダウンロード
    4. ファイルアップロード
  5. [SSH] SCPコマンドを利用したファイルのダウンロード・アップロード
    1. サーバーとクライアントの設置
    2. SSHサーバーの導入
    3. ファイルダウンロード
    4. ファイルアップロード

そもそもファイル転送とは?(ダウンロードとアップロード)

今回のテーマであるファイル転送とは、サーバーに対するファイルのダウンロードとアップロードのことを指します。

ここで言うダウンロードとは、そのファイルの所有元(サーバー)からダウンロード先(クライアント)へファイルが転送されることを意味します。

対してアップロードとは、そのファイルの所有元(クライアント)からアップロード先(サーバー)へファイルを転送することを意味します。

重要なのはクライアント側が能動的にリクエスト(要求)を出し、サーバーがその要求を許可してファイル転送するのか、それとも受けるのかという点です。

ダウンロードであれば、クライアントPCのダウンロード要求をサーバーが許可して指定ファイルをサーバーからクライアント側に転送します。

アップロードであれば、クライアントPCのアップロード要求をサーバーが許可して指定ファイルをクライアントからサーバー側に転送します。

このように、ファイル転送では要求を出すクライアントと、要求を受けとって許可を出すサーバーが存在し、 ファイルの転送方向はクライアントとサーバー間のやり取りによって決定されます。

それでは、次節からファイル転送のやり方について紹介します。

[HTTP] Webサーバーを利用したファイルダウンロード

はじめに、WebサーバーからクライアントのユーザーPCにファイルをダウンロードする方法を紹介します。

WebサーバーはHTML文書を含むWebコンテンツを配信するサーバーです。主にユーザーPCのGoogle chrome, Edge, safari, firefox, BraveなどのWebブラウザ(アプリケーション) にWebサイトやWebサービスを提供する役割を持ちます。

Webコンテンツを配信する特性上、wget・curlなどのファイル転送ツールから出すHTTPリクエストによって特定のファイルをクライアントのユーザーPCにダウンロードすることが可能です。 もちろん、WebブラウザのURL入力欄にファイルパスを指定することでもダウンロードが可能です。

ここでは、wgetコマンドとcurlコマンド(とWebブラウザ)を実行して、指定ファイル(今回はsample-file)をダウンロードしてみます。

サーバーとクライアントの設置
サーバーからファイルをダウンロードする準備として、まずはじめにLAN内に Webサーバーを立てます。そして、ダウンロードしたいファイルをそのWebサーバーのドキュメントルートに格納します。

LAN内に即席でWebサーバーを立てますので、WebサーバーへのアクセスはIPアドレスの直接指定になります。 (DNSサーバーでドメイン設定をすれば、http://utakamo.comのようにURLでアクセス可能です。今回は、ただファイル転送したいだけなので ドメイン設定はしません。)

今回、私の環境では192.168.3.0/24のネットワークにWebサーバーとなるLinuxマシン(192.168.3.10/24)とクライアントのLinuxマシン(192.168.3.20)を1台ずつ配置しています。

読者の方が実施したい場合は、自身が持つネットワーク環境を把握してください。ifconfigコマンドやipコマンドでネットワークのIPアドレス、サーバーとクライアントのIPアドレスを確認してください。

192.168.3.0/24のような、特定のネットワーク上にサーバーとクライアントが接続されており、共にIPアドレスが割り当てられていればOKです。

それでは、やっていきましょう。

補足:ドキュメントルートとは?
ドキュメントルートとは、簡単に言ってしまえば、ユーザーに配信するWebコンテンツを管理しているディレクトリです。 このディレクトリに対してユーザーにダウンロードしてもらいたいファイルを入れることで、そのファイルをWebコンテンツとして配信可能になります。

もし、このWebサイト「うたカモ技術ブログ」を管理するWebサーバーのドキュメントルートが「/www」であれば、http://utakamo.com/index.html とURLを打ってHTTPリクエストを出せば、私のWebサイトを管理するWebサーバーは「/www」の中のindex.htmlを探してその内容をHTTPリクエスト元のユーザーPCのWebブラウザにレスポンスします。

つまり、URL(ドメイン)のhttp://utakamo.comはWebサーバーの「/www」ディレクトリを示すということです。

今回紹介するWebサーバーの大半は、ドキュメントルートとして「/www」や「/www/html」などのディレクトリをデフォルトで持ちます。 このようにWebサーバーによって微妙にデフォルトで設定されているディレクトリが異なります。サーバーを立てた後はドキュメントルートがどこなのか常に確認しましょう。

Webサーバーの準備(次に挙げるものをどれか1つ実施)
ここでは、Webサーバーを立て、クライアント側にダウンロードさせるファイルをドキュメントルートに格納する方法を紹介します。

以下にWebサーバー別(python3、nginx、apache)の導入手順を掲載します。この技術ブログを読んでいる皆さんは、この中からどれか1つだけ導入作業を実施してください。

これを実施することで、Webサーバーからファイルをダウンロードできる環境が整います。

python3による簡易Webサーバーの導入

一番簡単なpython3の簡易Webサーバー機能から紹介します。

python3は以下のコマンドでインストールできます。

kamo@raspberrypi:~ $ sudo apt update    
kamo@raspberrypi:~ $ sudo apt install python3

python3の簡易Webサーバー機能は、実行したときのカレントディレクトリがドキュメントルートになります。

そのため、今回はホームディレクトリにdocrootディレクトリを作成して、そこにダウンロード対象のファイルであるsample-fileを作ります。

kamo@raspberrypi:~ $ mkdir /home/kamo/docroot
kamo@raspberrypi:~ $ cd /home/kamo/docroot
kamo@raspberrypi:/home/kamo/docroot $ touch sample-file
kamo@raspberrypi:/home/kamo/docroot $ echo hello world > sample-file

そして、次のコマンドを実行します。
これでドキュメントルートをdocrootディレクトリとする簡易Webサーバーが80番ポートで起動します。

kamo@raspberrypi:/home/kamo/docroot $ sudo python3 -m http.server 80

後はクライアント側からIPアドレスを伴ったファイルパスを次節で説明するコマンドの引数として指定(例:http://192.168.3.10/sample-file)すれば、docrootのsample-fileが転送(ダウンロード)される ようになります。

nginxの導入

nginxはWebサーバーとして代表的なアプリケーションです。

皆さんが良く見るWebサイトもnginxによって提供されているかもしれません。 そんなnginxは以下のコマンドでインストールできます。

kamo@raspberrypi:~ $ sudo apt update
kamo@raspberrypi:~ $ sudo apt install nginx

デフォルトのドキュメントルートは/var/www/htmlです。 この中に今回、クライアント側にダウンロードさせるsample-fileを格納しましょう。

kamo@raspberrypi:~ $ cd /var/www/html    <--nginxのDocument rootへ移動
kamo@raspberrypi:/var/www/html $ touch sample-file
kamo@raspberrypi:/var/www/html $ echo hello world > sample-file

最後に、nginxが起動しているか確認して準備完了です。
もし、停止していた場合はsystemctlのstartで起動してください。

kamo@raspberrypi:~ $ sudo systemctl status nginx
kamo@raspberrypi:~ $ sudo systemctl start nginx   <---nginxが停止していればここで起動

デフォルト設定では、80番ポートでサーバーが稼働します。

そのため、後はクライアント側からIPアドレスを伴ったファイルパスを次節で説明するコマンドの引数として指定(例:http://192.168.3.10/sample-file)すれば、nginxのドキュメントルートで管理するsample-fileが転送(ダウンロード)される ようになります。

apacheの導入

apacheもnginxに並んで代表的なWebサーバーアプリケーションです。

nginxと同様な方法でインストールできます。ちなみに現行最新バージョンはapache2らしいです。

kamo@raspberrypi:~ $ sudo apt update
kamo@raspberrypi:~ $ sudo apt install apache2

デフォルトのドキュメントルートも/var/www/htmlです。 この中に今回、クライアント側にダウンロードさせるsample-fileを格納しましょう。

kamo@raspberrypi:~ $ cd /var/www/html    <--apache2のDocument rootへ移動
kamo@raspberrypi:/var/www/html $ touch sample-file
kamo@raspberrypi:/var/www/html $ echo hello world > sample-file

最後に、apacheが起動しているか確認して準備完了です。
もし、停止していた場合はsystemctlのstartで起動してください。

kamo@raspberrypi:~ $ sudo systemctl status apache2
kamo@raspberrypi:~ $ sudo systemctl start apache2   <---apacheが停止していればここで起動

デフォルト設定では、80番ポートでサーバーが稼働します。

そのため、後はクライアント側からIPアドレスを伴ったファイルパスを次節で説明するコマンドの引数として指定(例:http://192.168.3.10/sample-file)すれば、apacheのドキュメントルートで管理するsample-fileが転送(ダウンロード)される ようになります。

Webサーバーからファイルをダウンロードする(wget・curl・browser)
上記のWebサーバーの準備が完了したら、以下のコマンドやブラウザでWebサーバーの ドキュメントルートに保存したsample-fileをダウンロードすることが出来ます。

以下に各コマンドの簡単な使い方と実行結果を掲載します。 ※実際に読者ご自身の環境で確認をしたい場合は、クライアント側の機器上で次のコマンドを実行してみてください。

wgetコマンドwget <source>

Webサーバーから指定ファイルをダウンロードするコマンドです。以下のように使用します。

wget http://192.168.3.10/sample-file

成功すると、プログレスバーの表示と共にダウンロードが始まります。 指定ファイルのダウンロード先はwgetコマンドを実行したディレクトリです。

kamo@rkamo:~ $ wget http://192.168.3.10/sample-file
Downloading 'http://192.168.3.10/sample-file'
Connecting to 192.168.3.10:80
Writing to 'sample-file'
sample-file           100% |*******************************|    12   0:00:00 ETA
Download completed (12 bytes)

curlコマンドcurl -o <destination> <source>

curlコマンドもwgetコマンドと同じようにファイルをWebサーバーからダウンロードすることができます。

-oオプションを付けずにそのまま実行すると、ファイルの内容がコンソールに出力されるので以下のようにして ダウンロード内容をファイルに保存します。

kamo@kamo:~ $ curl -o target-files http://192.168.3.10/target-files
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100 14004    0 14004    0     0  54095      0 --:--:-- --:--:-- --:--:-- 54279

Webブラウザ

Webサーバーは元々、Webブラウザに対してHTML文書を提供するサーバーです。

そのため、WebブラウザのURL入力欄にファイルを指定することでもダウンロードできます。

以下はfirefoxを使用してsample-fileをダウンロードしてみた結果です。 正常にファイルのダウンロードがされると右側にダイアログが表示されます。

今回はHTMLではないファイルを指定したのでダウンロードマークが表示され、downloadディレクトリなどにファイルが保存されます。

もし、ここでHTML文書(~.html)をダウンロードした場合は、Webブラウザによってすぐさまその内容が解釈され、HTMLコンテンツが画面に表示されます。

また、Webブラウザ側でファイルを指定せずにURLパス(例:http://utakamo.com)のみの指定をした場合、http://utakamo.com/index.htmlという名前のファイルの ダウンロード要求を暗黙的にしたことになります。

index.htmlはWebサイトのトップページなどに名づける特別なファイル名です。

このように、拡張子がhtml(+もしかしたらcgi)のファイルに対しては他ファイルと扱いが違いますので、そのことは意識しましょう。

[FTP] FTPコマンドを利用したファイルのダウンロード・アップロード

ここではFTPサーバーを利用したファイル転送について紹介します。

FTPサーバーはファイル転送用プロトコルのFTP(File Tranfer Protocol)を利用したサーバーです。

昔はWebサーバーにファイルをアップロードする際などに良く利用されていました。今はセキュリティの観点から SFTPやFTPSが使用されているようです。ただし、ローカル環境内にある機器同士のファイル転送で今も使用されます。

FTPはファイルのダウンロードとアップロードの両方ができますので、それぞれやってみて使い方を紹介します。

サーバーとクライアントの設置
サーバーとクライアントをネットワークに配置するところから紹介します。

今回、私の環境では192.168.3.0/24のネットワークにFTPサーバーとなるLinuxマシン(192.168.3.10/24)とクライアントのLinuxマシン(192.168.3.20)を1台ずつ配置しました。

読者の方が実施したい場合は、自身が持つネットワーク環境を把握してください。ifconfigコマンドやipコマンドでネットワークのIPアドレス、サーバーとクライアントのIPアドレスを確認してください。

192.168.3.0/24のような、特定のネットワーク上にサーバーとクライアントが接続されており、共にIPアドレスが割り当てられていればOKです。

今回は、FTPサーバー側にクライアントにダウンロードさせるserver-fileを用意します。一方、クライアント側にはFTPサーバーにアップロードするclient-fileを 用意します。これらのファイルをダウンロード・アップロードすることで、その使い方を紹介します。

FTPサーバー(vsftpd)の準備
それでは、FTPサーバーを導入して起動してみましょう。

今回は多くのLinuxディストリビューションで利用されるFTPサーバーのvsftpdをインストールします。

次のコマンドでvsftpdをインストールできます。

kamo@raspberrypi:~ $ sudo apt update
kamo@raspberrypi:~ $ sudo apt install vsftpd

インストールできたら、次は設定ファイルの/etc/vsftpd.confを編集します。

今回はデフォルト設定で禁止されているファイルのアップロード をしたいので、必要な書き込み権限を有効化します。

具体的には、/etc/vsftpd.confのwrite_enable項目のコメントアウト#を除去します。

/etc/vsftpd.conf
以下抜粋部
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES   <---この項目のコメントアウト#を除去して有効化
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022
#

これでファイルのアップロードが許可されます。 後は次のコマンドでFTPサーバーを起動しましょう。

kamo@raspberrypi:~ $ sudo systemctl start vsftpd

以降、FTPクライアントはファイルのダウンロードとアップロードが可能になります。

FTPサーバーにログイン
それでは、FTPクライアントを起動して実際にファイルを転送してみましょう。

クライアント側で次のコマンドを実行して、上記で立てたFTPサーバーにログインします。 ユーザー名とパスワードが聞かれますので入力しましょう。

kamo@kamo:~ $ ftp 192.168.3.10   <--ftpサーバーのIPアドレスやURLドメインを入力して接続します。
Connected to 192.168.3.10.
220 (vsFTPd 3.0.3)
Name (192.168.3.10:kamo): kamo   <--ユーザー名を入力します。
331 Please specify the password.
Password:    <--パスワードを入力します。
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ログイン後は、次に掲載するコマンドの実行によって、FTPサーバーからファイルをダウンロード・アップロード出来るようになります。

ファイルダウンロードftp> get <file>

FTPサーバーのディレクトリ確認と指定ファイルのダウンロードをしてみます。

まずここでは、どのファイルをダウンロードするのか確認するためにサブコマンドのlsを実行します。 (別ディレクトリへの移動はサブコマンドのcdで出来ます。)

ftp> ls
229 Entering Extended Passive Mode (|||55983|)
150 Here comes the directory listing.
drwxr-xr-x    2 1000     1000         4096 Feb 21 10:14 Bookshelf
drwxr-xr-x    2 1000     1000         4096 Mar 01 20:17 Desktop
drwxr-xr-x    7 1000     1000         4096 Jul 16 16:15 Documents
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Downloads
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Music
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Pictures
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Public
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Videos
-rw-r--r--    1 1000     1000           11 Jul 16 07:51 server-file

今回は、クライアント側にダウンロードさせたいファイルのserver-fileがFTPサーバー側のホームディレクトリにあることが確認できました。

それでは、このsample-fileをクライアント側でダウンロードしましょう。

上記のls実行で、FTPサーバーのカレントディレクトリがホームディレクトリ であることは分かっています。なので、そのまま次のコマンドを実行してクライアントへファイルを転送が可能です(ダウンロード指定 されたファイルをFTPサーバーのカレントディレクトリから探してクライアントへ転送します)。

ftp> get server-file
local: server-file remote: server-file
229 Entering Extended Passive Mode (|||12501|)
150 Opening BINARY mode data connection for server-file (11 bytes).
100% |***********************************|    11        3.10 KiB/s    00:00 ETA
226 Transfer complete.
11 bytes received in 00:00 (1.07 KiB/s)

コマンド実行が成功すると、上記のようにプログレスバーが表示されてダウンロードが完了します。 このときのダウンロード先はftp> get server-fileを実行したクライアント側のカレントディレクトリになります。

ファイルアップロードftp> put <file>

ファイルのアップロードでは、まずクライアント側がアップロード対象のファイルを持ったディレクトリをカレントディレクトリとしているかが重要です。

サブコマンドのlcdを使用して、クライアント側のカレントディレクトリを確認することができます。 (今回、私は/home/kamoにFTPサーバーにアップロードするclient-fileを置いたはずなので、クライアントのカレントディレクトリが/home/kamoであるか確認しています。)

ftp> lcd
Local directory now: /home/kamo   <---クライアント側のカレントディレクトリが確認できます

lsはFTPサーバー側のファイルを確認するサブコマンド、lcdはクライアント側の カレントディレクトリを確認するサブコマンドなので使い分けに注意しましょう。

それでは、client-fileを次のコマンドでFTPサーバーにアップロードしてみます。

ftp> put client-file
local: client-file remote: client-file
229 Entering Extended Passive Mode (|||34511|)
150 Ok to send data.
100% |*************************************************************************************************|    11       14.37 KiB/s    00:00 ETA
226 Transfer complete.
11 bytes sent in 00:00 (0.95 KiB/s)

コマンド実行が成功すると、プログレスバーが表示されてアップロードが完了します。 このときのアップロード先はFTPサーバーのカレントディレクトリです。

そのため、今度はlsを実行して、FTPサーバーのカレントディレクトリの中身を見てみると 確かにclient-fileが存在することが分かります。

ftp> ls
229 Entering Extended Passive Mode (|||55983|)
150 Here comes the directory listing.
drwxr-xr-x    2 1000     1000         4096 Feb 21 10:14 Bookshelf
drwxr-xr-x    2 1000     1000         4096 Mar 01 20:17 Desktop
drwxr-xr-x    7 1000     1000         4096 Jul 16 16:15 Documents
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Downloads
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Music
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Pictures
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Public
drwxr-xr-x    2 1000     1000         4096 Feb 26 20:46 Videos
-rw-r--r--    1 1000     1000           11 Jul 16 07:51 server-file
-rw-r--r--    1 1000     1000           11 Jul 16 13:28 client-file

[UDP] TFTPコマンドを利用したファイルのダウンロード・アップロード

ここではTFTPサーバーを利用したファイル転送について紹介します。

TFTPサーバーはファイル転送としてトランスポート層プロトコルであるUDP(User Datagram Protocol)を利用したサーバーです。

ファイル転送手続きをUDPによって簡素化しているため、データストリームへの負荷を最小限にしてファイルをダウンロード・アップロードすることができます。

ただし、FTPのようなサーバーログイン機能を持たないため、機器情報を確認するようなlslcdなどのサブコマンドはありません。

それでは、ファイルのダウンロードとアップロードをそれぞれやってみて使い方を紹介します。

サーバーとクライアントの設置
サーバーとクライアントをネットワークに配置するところから紹介します。

今回、私の環境では192.168.3.0/24のネットワークにTFTPサーバーとなるLinuxマシン(192.168.3.10/24)とクライアントのLinuxマシン(192.168.3.20)を1台ずつ配置しました。

読者の方が実施したい場合は、自身が持つネットワーク環境を把握してください。ifconfigコマンドやipコマンドでネットワークのIPアドレス、サーバーとクライアントのIPアドレスを確認してください。

192.168.3.0/24のような、特定のネットワーク上にサーバーとクライアントが接続されており、共にIPアドレスが割り当てられていればOKです。

今回は、TFTPサーバー側にクライアントにダウンロードさせるserver-fileを用意します。一方、クライアント側にはTFTPサーバーにアップロードするclient-fileを 用意します。これらのファイルをダウンロード・アップロードすることで、その使い方を紹介します。

TFTPサーバー(tftpd-hpa)の導入
それでは、TFTPサーバーを導入して起動してみましょう。

今回は多くのLinuxディストリビューションで利用されるTFTPサーバーのtftpd-hpaをインストールします。

次のコマンドでtftpd-hpaをインストールできます

kamo@raspberrypi:~ $ sudo apt update
kamo@raspberrypi:~ $ sudo apt install tftpd-hpa

インストールできたら、次は設定ファイルの/etc/default/tftpd-hpaを編集します。

今回はデフォルト設定で禁止されているファイルのアップロード をしたいので、必要な書き込み権限を有効化します。

具体的には、/etc/default/tftpd-hpaのTFTP_OPTIONS項目に--createを追記します。

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"   書き込みを許可したい場合はここに--createを追記します。

また、tftpサーバーの転送用ディレクトリの/srv/tftpはroot権限がデフォルトで設定されているため、このままでは権限エラーとなってしまいます。

そこで次はchownコマンドを使用して/srv/tftpの権限をrootからtftpに変更します。 これでアップロード要求が拒否されなくなります。

kamo@raspberrypi:~ $ $ sudo chown -R tftp:tftp /srv/tftp

最後にTFTPサーバーを起動してみましょう。次のコマンドを実行してください。

kamo@raspberrypi:~ $ $ sudo systemctl start tftpd-hpa

以降は、次に掲載するコマンドの実行でクライアント側でファイルのダウンロードとアップロードができます。

ファイルダウンロードtftp get <file>

getでTFTPサーバーから指定したファイルをダウンロードできます。

kamo@kamo:~ $ tftp 192.168.3.10
tftp> get server-file
Received 12 bytes in 0.2 seconds

なお、今回はTFTPサーバーへのアクセスとダウンロード行を分けていますが、次のように一行で済ませることもできます。

tftp 192.168.3.10 get server-file

ファイルアップロードtftp put <file>

putでTFTPサーバーから指定したファイルをダウンロードできます。

kamo@kamo:~ $ tftp 192.168.3.10
tftp> put client-file
Sent 13 bytes in 0.0 seconds

なお、今回はTFTPサーバーへのアクセスとダウンロード行を分けていますが、次のように一行で済ませることもできます。

tftp 192.168.3.10 put client-file

[SFTP] SFTPコマンドを利用したファイルのダウンロード・アップロード

作成中です。

[FTPS] FTPSコマンドを利用したファイルのダウンロード・アップロード

作成中です。

[SSH] SCPコマンドを利用したファイルのダウンロード・アップロード

SSH接続を利用したファイル転送方法のSCP(Secure Copy)について紹介します。

SCPコマンドはSSHのストリームを利用してファイル転送をするツールです。SSHをサポートする機器同士で利用できます。

サーバーとクライアントの設置
サーバーとクライアントをネットワークに配置するところから紹介します。

今回、私の環境では192.168.3.0/24のネットワークにSSHサーバーとなるLinuxマシン(192.168.3.10/24)とクライアントのLinuxマシン(192.168.3.20)を1台ずつ配置しました。

読者の方が実施したい場合は、自身が持つネットワーク環境を把握してください。ifconfigコマンドやipコマンドでネットワークのIPアドレス、サーバーとクライアントのIPアドレスを確認してください。

192.168.3.0/24のような、特定のネットワーク上にサーバーとクライアントが接続されており、共にIPアドレスが割り当てられていればOKです。

今回は、SSHサーバー側にクライアントにダウンロードさせるserver-fileを用意します。一方、クライアント側にはSSHサーバーにアップロードするclient-fileを 用意します。これらのファイルをダウンロード・アップロードすることで、その使い方を紹介します。

SSHサーバー(OpenSSH)の導入
それでは、次はSSHサーバーをインストールして起動します。

とは言え、SSHサーバーは多くのLinuxディストリビューションにプリインストールされています。

SSHサーバーがインストールされていない場合は、次のコマンドでインストールしてください。 ここでは、SSHサーバーとして代表的なOpenSSHをインストールします。

kamo@raspberrypi:~ $ sudo apt update
kamo@raspberrypi:~ $ sudo apt install openssh-server

インストールが完了したら、次のコマンドで現在の動作ステータスを確認し、停止中であれば起動します。

kamo@raspberrypi:~ $ sudo systemctl status sshd  <--- ステータスを確認
kamo@raspberrypi:~ $ sudo systemctl start sshd  <--- 停止していればここで起動

これでSCPコマンドによるファイルのダウンロードとアップロードができる環境が整いました。

それでは、次にファイルのダウンロードとアップロード方法について掲載します。 一応、別々に掲載していますが、どちらもやっていることは同じです。

ファイルダウンロードscp <source> <destination>

クライアント側のコンソールに次のSCPコマンドを入力することで、サーバー側が持つファイルをダウンロードできます。 パスワードを掛けている場合はその入力を要求されます。

この例では、SSHサーバーの/home/kamoに存在するserver-fileをクライアントのカレントディレクトリにダウンロードしています。
kamo@kamo:~ $ scp kamo@192.168.3.10:/home/kamo/server-file ./
kamo@192.168.3.10's password: 
server-file                                   100%   11     2.1KB/s   00:00  

ファイルアップロードscp <source> <destination>

クライアント側のコンソールに次のSCPコマンドを入力することで、サーバーへファイルをアップロードできます。 パスワードを掛けている場合はその入力を要求されます。

この例では、クライアント側のclient-fileをSSHサーバーの/home/kamoにアップロードしています。
kamo@kamo:~ $ scp ./client-file kamo@192.168.3.10:/home/kamo
kamo@192.168.3.10's password: 
client-file                                   100%   11     1.3KB/s   00:00    

これは、上記のファイルダウンロードと同じコマンド呼び出しです。ファイル元<source>と転送先<destination>の関係を入れ替えただけです。

おわりに

今回は、いろいろなファイル転送方法について紹介しました。

状況に応じて適切な方法を使い分けることが重要です。複数の方法を理解していることで、様々な場面に対応できるでしょう。

もしも困ったことがあった際には、この記事をいつでも見返してみて頂ければと思います。

この記事が読者の皆さんの助けになれば幸いです。

参考文献