アクセラと+αな生活
アクセラとα350と共に過ごす気まぐれ日記です。
Firefox ブラウザ無料ダウンロード
2017年06月
≪05月  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30    07月≫
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
今回は「tar」と「ssh」を組み合わせた、ネットワーク上を暗号化してファイルコピー(バックアップ)してみます。

「tar」コマンドの裏技の組み合わせみたいなかんじですねww
(いろいろ試してみて、やっとできたww)

「tar」コマンドは「f」オプションでアーカイブファイル名を指定するのですが、このファイル名に「-」を指定すると出力先のファイルが標準出力になります。
出力先が標準出力になるということは、シェルの「|」(パイプライン:あるコマンドを実行した時の出力を別のコマンドの入力へ引き渡す機能)を利用して別のコマンドへ引き渡せるということです。

つまり、これを利用して、
 ・「tar」でバックアップしたいディレクトリをアーカイブ(圧縮)し、そのアーカイブされたデータを標準出力へ出力
 ・標準出力されたアーカイブデータをパイプラインで「ssh」へ引き渡す
 ・パイプラインで引き渡されたアーカイブデータを「ssh」上で実行する「tar」の解凍(展開)コマンドの入力として引き渡し、リモートコンピュータ上で解凍
てなことをしてみます。

ネットワーク上は「ssh」を利用するので暗号化されますし、ネットワーク上のデータは「tar」で圧縮されたデータが転送されるので転送量は少なくなるという利点があります。
欠点は、バックアップ元で圧縮、バックアップ先で解凍するので、CPU、メモリなどのリソースを消費します。

まずは、「ssh」で接続できることが前提となります。

やり方は、以下のコマンドを実行するだけです。


$ tar zcf - <バックアップ対象のディレクトリ> |(ssh <ユーザ名>@<ホスト名> 'tar zxvf - -C <バックアップ先ディレクトリ>')

<バックアップ対象のディレクトリ>はバックアップを行うディレクトリを指定します。
<ユーザ名>は「ssh」で接続するユーザ名を指定します。
<ホスト名>はバックアップ先のホスト名を指定します。<ユーザ名>と<ホスト名>は「@」で区切ります。
<バックアップ先ディレクトリ>はバックアップ先のホスト上のディレクトリを指定します。

例えば、
バックアップしたいディレクトリを「back_data」、「ssh」接続ユーザが「foo」、バックアップ先のホストが「axela.co.jp」、バックアップ先のディレクトリを「/tmp/backup」とすると


$ tar zcf - back_data |(ssh foo@axela.co.jp 'tar zxvf - -C /tmp/backup')
Enter passphrase for key '/home/xxxx/.ssh/id_rsa':<sshの認証パスワードを入力>

というコマンドを実行します。

簡単にコマンドの説明をしておきますね。
上記の「tar zcf - back_data」は「back_data」を
 z:gzip で圧縮
 c:新規アーカイブを作成
 f:アーカイブファイルを指定、ただし、アーカイブファイルが「-」のため、標準出力となる
という意味です。
これで、アーカイブされたデータが標準出力に渡され、パイプライン(|)で「ssh foo@axela.co.jp」に渡されます。
「ssh foo@axela.co.jp」 は「ssh」で指定されたユーザ名(foo)でバックアップ先のホスト(axela.co.jp)へログインを試みます。
この時、ログインに成功すれば、「tar zxvf - -C /tmp/backup」をリモートホスト(sshの接続先、つまり、「axela.co.jp」)で実行します。
「tar zxvf - -C /tmp/backup」は
 z:gzip(gunzip)で解凍
 x:アーカイブファイルを展開
 v:アーカイブファイルを表示
 f:アーカイブファイルを指定、ただし、アーカイブファイルが「-」のため、標準入力となる
 -C:アーカイブデータを展開するディレクトリ(「/tmp/backup」)を指定
を行います。

「f」オプションで「-」となっているので、パイプラインで渡されたアーカイブデータが標準入力となってバックアップ先のホスト上でファイルが展開されるという動作になります。





暗号化された状態で簡単にネットワーク経由でバックアップできるのですが、圧縮、展開にマシンリソースを食われます。。。
データ量の少ないファイルやディレクトリをネットワークバックアップするのには十分使えますが、データ量が多い場合、結構なリソースが消費されるのが欠点です。

リソース消費しすぎで、本格的なバックアップには使えないかもしれません。。。


コメント
この記事へのコメント
rsync -z じゃダメですか?
2009/11/26(木) 16:52 | URL | とおりすがり #-[編集]
とおりすがりさん

「rsync」の「-z」オプション(Compress)だけでは、ネットワーク越しに暗号化通信でコピーを行うことはできないと思います。
少なくとも私はそのような方法は知りません。。。

「rsync」には「-e」というリモートシェルを指定するオプションがありますので、「rsync -e ssh ~」を利用することで、ネットワークバックアップすることはできます。

なお、「rsync」と「ssh」の組み合わせは「Ubuntu 9.0.4 で ssh rsync バックアップしてみる。」という記事を当ブログにて記載(ただし、ネットワーク越しのコピーに重点を置いているので、「-e」以外のオプションは説明してませんが。。。)してます。

実際に使うのであれば、「rsync -e ssh <ローカルマシンのバックアップ元ディレクトリ> <ssh接続ユーザ名>@<リモートマシン>:<リモートマシンのバックアップ先のディレクトリ>」とすれば可能です。

厳密にパフォーマンス検証をしてませんが、「-z」オプション有無はうちの環境ではあまり影響が出なかったのでつけてませんが、「rsync -z ~ -e ssh ~」としても問題ないと思います。
2009/11/26(木) 23:51 | URL | ホノミ #-[編集]
承認待ちコメント
このコメントは管理者の承認待ちです
2012/05/14(月) 21:19 | | #[編集]
URL :
コメント :
パスワード :
管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
Template designed by アクセラと+αな生活

Powered by .
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。