上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
今回のお話はちょっとややこしいです。。。
rsync (ファイルのコピーを行うコマンド)と ssh を組み合わせてネットワーク上を暗号化してファイルコピー(バックアップ)を行います。
まあ、一応コピー成功したので、及第点ですけど、もっと簡単にできないか考え中だったり。。。
rsync (ファイルのコピーを行うコマンド)と ssh を組み合わせてネットワーク上を暗号化してファイルコピー(バックアップ)を行います。
まあ、一応コピー成功したので、及第点ですけど、もっと簡単にできないか考え中だったり。。。
ssh でバックアップ先になるマシンに接続できること、rsync がインストールされていることが大前提です。
(ssh でネットワーク越しに接続して、rsync コピーしますからね)
今回は Ubuntu 9.04 のマシンのデータを バックアップ先(VineLinux 5.0)へバックアップすることとします。
【ネットバックアップ】
「rsync」にはリモートシェルを指定するための「-e」オプションというのがあります。
この「-e」オプションを利用してみます。
さて、「rsync」と「ssh」を利用してネットバックアップを行うには、以下のコマンドを実行します。
「-e」で使用するシェル(今回は「ssh」)を指定します。
「rsync」でのリモートマシン、ディレクトリの指定は「<リモートマシン>:<リモートマシンのバックアップ先のディレクトリ>」というように「:」(コロン)で区切ります。
また、ユーザを指定する場合は「<ユーザ名>@<リモートマシン>」というように「@」で区切ります。
例えば、リモートのホスト「axela.co.jp」、ディレクトリが「/tmp」、接続ユーザが「foo」であれば
「foo@axela.co.jp:/tmp」
というように指定します。
実際に使用してみると、以下のようになります。
最後に転送したファイルサイズなどが表示されれば、完了です。
「rsync」を利用するので、同一ディレクトリへのバックアップであれば、二回目以降は重複ファイルをコピーしないので、時間は短縮されます。
(初回は全てのファイルをバックアップ)
今回は「rsync」でのネットバックアップで最低限のオプションしか指定していないので、必要なオプションがあれば追加して下さい。
【パーミッションに関して】
ssh で接続するので、接続ユーザの権限が使用されます。
接続ユーザの権限がなければ、「Permission denied」で見ることができないディレクトリやファイルは読み込めませんし、書き込み権限がないバックアップ先では書き込みができません。
「rsync」には「--rsync-path」というオプションがあるので、「sudo rsync」とかを指定すれば、root 権限で実行できるかもしれません。
(うちの環境では「--rsync-path」がうまくいきませんでしたが。。。)
今回はセキュリティのため、毎回 ssh の鍵認証のパスワード入力を行うようにしております。
シェルスクリプト化するのであれば、「ssh-add」を利用して登録すれば、パスワード入力を省くことができますね。
以下に「ssh-add」を利用してパスワード入力を省く手順を記載しておきます。
【ssh-add パスワード入力を省く】
「ssh-agent」を実行することにより、ssh-sgent プロセスが起動します。
この表示メッセージのうち、「SSH_AUTH_SOCK」(ssh のソケット情報)と「SSH_AGENT_PID」(ssh-agent のプロセスID)という環境変数が必要になるので、コピーしてそのまま貼り付けて実行(環境変数のexport)します。
(「ssh-agent | head -2 ><適当なファイル>」とかで、適当なテンポラリファイルにリダイレクトして、そのファイルを実行してもいいかも。。。)
環境変数を「export」した後に「ssh-add」を実行し、認証鍵を ssh-agent に登録してあげます。
これで、「rsync -e ssh ~」を実行しても、パスワード要求がなくなりますので、入力しなくてもよくなります。
(ssh でネットワーク越しに接続して、rsync コピーしますからね)
今回は Ubuntu 9.04 のマシンのデータを バックアップ先(VineLinux 5.0)へバックアップすることとします。
【ネットバックアップ】
「rsync」にはリモートシェルを指定するための「-e」オプションというのがあります。
この「-e」オプションを利用してみます。
さて、「rsync」と「ssh」を利用してネットバックアップを行うには、以下のコマンドを実行します。
rsync -e ssh -av <ローカルマシンのバックアップ元ディレクトリ> <ssh接続ユーザ名>@<リモートマシン>:<リモートマシンのバックアップ先のディレクトリ>
「-e」で使用するシェル(今回は「ssh」)を指定します。
「rsync」でのリモートマシン、ディレクトリの指定は「<リモートマシン>:<リモートマシンのバックアップ先のディレクトリ>」というように「:」(コロン)で区切ります。
また、ユーザを指定する場合は「<ユーザ名>@<リモートマシン>」というように「@」で区切ります。
例えば、リモートのホスト「axela.co.jp」、ディレクトリが「/tmp」、接続ユーザが「foo」であれば
「foo@axela.co.jp:/tmp」
というように指定します。
実際に使用してみると、以下のようになります。
$ rsync -e ssh -av /<バックアップするディレクトリ> <ユーザ名>@<リモートホスト>:/<バックアップ先のディレクトリ>
Enter passphrase for key '/home/<ユーザ>/.ssh/id_rsa':ssh 認証のパスワードを入力(ssh の認証が鍵認証の場合)
sending incremental file list
created directory <バックアップ先のディレクトリ>(バックアップ先のディレクトリが無い場合作成される)
~ 略 ~
sent 9017049 bytes received 34172 bytes 441522.98 bytes/sec
total size is 8931215 speedup is 0.99
最後に転送したファイルサイズなどが表示されれば、完了です。
「rsync」を利用するので、同一ディレクトリへのバックアップであれば、二回目以降は重複ファイルをコピーしないので、時間は短縮されます。
(初回は全てのファイルをバックアップ)
今回は「rsync」でのネットバックアップで最低限のオプションしか指定していないので、必要なオプションがあれば追加して下さい。
【パーミッションに関して】
ssh で接続するので、接続ユーザの権限が使用されます。
接続ユーザの権限がなければ、「Permission denied」で見ることができないディレクトリやファイルは読み込めませんし、書き込み権限がないバックアップ先では書き込みができません。
「rsync」には「--rsync-path」というオプションがあるので、「sudo rsync」とかを指定すれば、root 権限で実行できるかもしれません。
(うちの環境では「--rsync-path」がうまくいきませんでしたが。。。)
今回はセキュリティのため、毎回 ssh の鍵認証のパスワード入力を行うようにしております。
シェルスクリプト化するのであれば、「ssh-add」を利用して登録すれば、パスワード入力を省くことができますね。
以下に「ssh-add」を利用してパスワード入力を省く手順を記載しておきます。
【ssh-add パスワード入力を省く】
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-AtereG8580/agent.8580; export SSH_AUTH_SOCK;
SSH_AGENT_PID=8581; export SSH_AGENT_PID;
echo Agent pid 8581;
$ SSH_AUTH_SOCK=/tmp/ssh-ouYsdm8833/agent.8833; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=8834; export SSH_AGENT_PID;
$ ssh-add
Enter passphrase for /home/<ユーザ>/.ssh/id_rsa:
Identity added: /home/<ユーザ>/.ssh/id_rsa (/home/<ユーザ>/.ssh/id_rsa)
「ssh-agent」を実行することにより、ssh-sgent プロセスが起動します。
この表示メッセージのうち、「SSH_AUTH_SOCK」(ssh のソケット情報)と「SSH_AGENT_PID」(ssh-agent のプロセスID)という環境変数が必要になるので、コピーしてそのまま貼り付けて実行(環境変数のexport)します。
(「ssh-agent | head -2 ><適当なファイル>」とかで、適当なテンポラリファイルにリダイレクトして、そのファイルを実行してもいいかも。。。)
環境変数を「export」した後に「ssh-add」を実行し、認証鍵を ssh-agent に登録してあげます。
これで、「rsync -e ssh ~」を実行しても、パスワード要求がなくなりますので、入力しなくてもよくなります。