MAGAZINE

キャリテク!マガジン

コラム

転ばぬ先のバックアップ (5) 外部ホストへファイルをバックアップしよう - sftp 編

こんにちは。株式会社パイプラインの濱田です。
前回までは自ホストにあるファイルをバックアップする方法について取り上げました。今回からは自ホスト(ローカル)にあるファイルを他ホスト(リモート)へバックアップする方法について取り上げます。

リモートホストへバックアップを行う理由

ファイル編集作業の都度または変更管理をシンプルに行いたい、かつ、サーバー障害による影響が軽微な場合はローカルでのバックアップから素早く復旧させることが可能です。しかし、ディスク障害やネットワーク障害により目的のファイルが取り出せないとなると、バックアップとしては不十分です。

ローカルホストからリモートホストへのファイルバックアップ、またはリモートホストからローカルホストへのファイルリストアを行う方法は複数ありますが、今回はsftpによるバックアップ、リストアについて取り上げます。

sftpコマンドによるファイルバックアップとリストア

sftpとは、SSHで暗号化された通信路を経由した安全なファイル送受信プロトコルです。ftpは平文で通信を行う (暗号化されていない) ため、近年のLinuxではftpサーバーやftpクライアント (ftpコマンド) は意図してインストールしない限り使用できません。

 

ローカルホストからリモートホストへバックアップする

それでは、自ホスト(poposample-01)のホームディレクトリ直下にあるsample.txtをリモートホスト(poposample-02)へsftp転送してみましょう。

[nullpopopo@poposample-01 ~]$ sftp poposample-02.pipelinejp.com
nullpopopo@poposample-02.pipelinejp.com's password:
Connected to poposample-02.pipelinejp.com.
sftp> put sample.txt
Uploading sample.txt to /home/nullpopopo/sample.txt sample.txt                                                    100%   31KB
13.3MB/s   00:00 sftp> quit

sftp <リモートホスト> の構文でコマンドを実行するとパスワードを聞かれます。パスワードを入力してエンターキーを押下すると、sftpのプロンプトが表示されます。ローカルホストからリモートホストへのファイル転送はputコマンドを実行します。上記の例では、「put sample.txt」と実行していますので、ホームディレクトリ直下にあるsample.txtがリモートホストへ転送されます。ディレクトリのパス名を省略すると、ホームディレクトリ直下のファイルを転送します。sftpのプロンプトを抜けてローカルホストのシェルに戻るには「quit」コマンドを実行します。

ホームディレクトリ(/home/nullpopopo)直下のファイルではなく、/home/nullpopopo/SAMPLEディレクトリ以下にあるsample.txtを転送したい場合は、パスを指定してputコマンドを実行します。

[nullpopopo@poposample-01 ~]$ sftp poposample-02.pipelinejp.com
nullpopopo@poposample-02.pipelinejp.com's password:
Connected to poposample-02.pipelinejp.com.
sftp> put SAMPLE/sample.txt
Uploading SAMPLE/sample.txt to /home/nullpopopo/sample.txt
SAMPLE/sample.txt                                             100%   31KB 
15.5MB/s   00:00
sftp> quit

または、ローカルホストのパスを移動してからputコマンドを実行する方法もあります。sftpのプロンプト内でローカルホストのディレクトリを移動するには「lcd」コマンドを実行します。

[nullpopopo@poposample-01 ~]$ sftp poposample-02.pipelinejp.com
nullpopopo@poposample-02.pipelinejp.com's password:
Connected to poposample-02.pipelinejp.com.
sftp> lcd SAMPLE
sftp> put sample.txt
Uploading sample.txt to /home/nullpopopo/sample.txt
sample.txt                                                    100%   31KB 
12.6MB/s   00:00 sftp> quit

先ほどはlcdでローカルホスト側のカレントディレクトリを移動しましたが、リモートホストのディレクトリを移動するにはcdコマンドを使用します。ややこしいかも知れませんが、sftpコマンドのプロンプトはリモートホストのもの、つまりpoposample-02.pipelinejp.comへお邪魔して実行しているので、感覚として覚えておくとよいでしょう。

単一のファイルだけではなく、ディレクトリ単位での転送を行ってみましょう。ホームディレクトリ直下にあるSAMPLEディレクトリをリモートホストへsftp転送してみましょう。

[nullpopopo@poposample-01 ~]$ sftp poposample-02.pipelinejp.com
nullpopopo@poposample-02.pipelinejp.com's password:
Connected to poposample-02.pipelinejp.com.
sftp> put -r SAMPLE
Uploading SAMPLE/ to /home/nullpopopo/SAMPLE
Entering SAMPLE/ SAMPLE/sample.txt                                             100%   31KB 
14.6MB/s   00:00
sftp> quit

putコマンドの後に「-r (recursiveの意) 」をつけて実行することで、対象のディレクトリ以下を再帰的に転送することができます。

 

リモートホストからローカルホストへリストアする

反対に、リモートホストにあるファイルをローカルへ転送してみましょう。リモートホストのSAMPLEディレクトリにあるsample.txtをローカルホストのホームディレクトリ直下にダウンロードします。

[nullpopopo@poposample-01 ~]$ sftp poposample-02.pipelinejp.com
nullpopopo@poposample-02.pipelinejp.com's password:
Connected to poposample-02.pipelinejp.com.
sftp> cd SAMPLE
sftp> get sample.txt
Fetching /home/nullpopopo/SAMPLE/sample.txt to sample.txt
/home/nullpopopo/SAMPLE/sample.txt                            100%   31KB 
11.6MB/s   00:00
sftp> quit

または、以下のようにcdせずに実行することも可能です。

[nullpopopo@poposample-01 ~]$ sftp poposample-02.pipelinejp.com
nullpopopo@poposample-02.pipelinejp.com's password:
Connected to poposample-02.pipelinejp.com.
sftp> get SAMPLE/sample.txt
Fetching /home/nullpopopo/SAMPLE/sample.txt
to sample.txt
/home/nullpopopo/SAMPLE/sample.txt                            100%   31KB 
13.1MB/s   00:00
sftp> quit

ディレクトリの転送も同様に行います。以下の例では、poposample-02.pipelinejp.comの/home/nullpopopo/SAMPLEディレクトリをローカルホストへダウンロードしています。

[nullpopopo@poposample-01 ~]$ sftp poposample-02.pipelinejp.com
nullpopopo@poposample-02.pipelinejp.com's password:
Connected to poposample-02.pipelinejp.com.
sftp> get -r SAMPLE
Fetching /home/nullpopopo/SAMPLE/ to SAMPLE
Retrieving /home/nullpopopo/SAMPLE
/home/nullpopopo/SAMPLE/sample.txt                            100%   31KB 
10.5MB/s   00:00
sftp> quit

今回の例では以下の操作を実行しました。

  • ローカルホストのファイルをリモートホストへバックアップする
  • ローカルホストのディレクトリを再帰的にリモートホストへバックアップする
  • リモートホストのファイルをローカルホストへリストアする
  • リモートホストのディレクトリを再帰的にローカルホストへリストアする

次回はsftpによるファイル転送を自動実行する方法を取り上げます。

まずはエンジニアデビューしたい、という方は、3ヶ月間学びながらお給料が貰える AltX キャリテク!の門を叩いてみてはいかがでしょう。
https://www.kcct.co.jp/careetec/

関連記事

facebook シェアシェア
LINE シェアシェア