rsync + ssh で大学のPCアカウントと自分のPCのファイルを同期する
大学のPCと自分のPCのどちらもよく使うのだが、ファイルの移動がめんどくさい。今まではUSBメモリにいれたり、Dropboxを使ったりしていたが、USBメモリは時々忘れて持ち合わせていなかったり、Dropboxは大学のPCにクライアントがインストールされていないので、いちいちブラウザを開いてアップロードしなければいけなかったりする。
もっと簡単で楽な方法がないか探してみたところ、大学のPCにsshで接続できることがわかった。sshとは簡単に言えばネットワークを介してリモートPCにログインして色々操作できる機能のこと。sshで大学のPCにログインして、自分のPCにファイルをコピーすればいい。
ファイルの同期には、rsyncという同期をとるのに便利なアプリケーションを使う。
以下わかりやすいように、
自分のPC | ローカルPC |
大学のPC | リモートPC |
ローカルPCのユーザー名 | local_user |
リモートPCのユーザー名 | remote_user |
リモートPCのホスト名 | remote_host |
と呼ぶことにする。
sshでパスワードを使わずにログインできるようにする
sshでログインするには、ローカルPCの端末で
$ ssh remote_user@remote_host Password: //ここでパスワードを入力。入力しても画面には表示されないので注意。
とすればよいが、毎回パスワードを入力しなければならない。
簡単にするためにパスワード認証ではなく公開鍵認証にする。
ローカルPCで公開鍵と秘密鍵の生成
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/local_user/.ssh/id_rsa): // 何も入力せずEnter Created directory '/home/local_user/.ssh'. Enter passphrase (empty for no passphrase): // 何も入力せずEnter Enter same passphrase again: // 何も入力せずEnter Your identification has been saved in /home/local_user/.ssh/id_rsa. Your public key has been saved in /home/local_user/.ssh/id_rsa.pub. The key fingerprint is: 44:8c:55:80:3c:95:33:9d:74:a4:9a:d2:cb:c5:74:a2 local_user@local_host The key's randomart image is: +--[ RSA 2048]----+ | . *=*ooo | | =.= oo | | ..o+ . | | o * o | | . E o | | o o | | o | | | | | +-----------------+
これで /home/local_user/.ssh ディレクトリの下に、id_rsa(秘密鍵)とid_rsa.pub(公開鍵)が生成される。
生成されているか確認。
$ ls ~/.ssh/ id_rsa id_rsa.pub
リモートPCに公開鍵を置く
ローカルPCのid_rsa.pub(公開鍵)をリモートPCのホームディレクトリにコピー。
$ scp ~/.ssh/id_rsa.pub remote_user@remote_host:~/ Password: // パスワード入力
リモートPCにsshでログイン。
$ ssh remote_user@remote_host Password: // パスワード入力
コピーされているか確認。
$ ls ~/ // id_rsa.pub があるはず
コピーした公開鍵を /home/remote_user/.ssh/authorized_keys の末尾に追加する。
$ mkdir ~/.ssh // .sshディレクトリがなければ作成 $ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
一度リモートPCからログアウトし、その後パスワードなしでログインできるか確認する。
$ exit $ ssh remote_user@remote_host // パスワードなしで接続できる
rsyncでファイルの同期を取る
使用するrsyncのコマンド
$ rsync -auvz --delete {コピー元} {コピー先}
オプションの意味
-a | 再帰的(サブディレクトリもコピーされる)かつファイルの状態(更新日時など)もコピーされる |
-u | コピー先のほうが新しければコピーしない |
-v | 処理の詳細を表示する |
-z | データを圧縮して転送する |
--delete | コピー元で削除されたファイルはコピー先でも削除される |
リモートPCの /home/remote_user/workspace/ ディレクトリをローカルPCの /home/local_user/workspace/ ディレクトリにコピーしたい場合
$ rsync -auvz --delete remote_user@remote_host:~/workspace/ ~/workspace/
逆にローカルPCからリモートPCにコピーしたい場合
$ rsync -auvz --delete ~/workspace/ remote_user@remote_host:~/workspace/
これでローカルPCで作業するときは、作業前にリモートPCからローカルPCにコピー、作業後にローカルPCからリモートPCにコピーするようにしておけば良い。