ssh(1)を使い倒す
sshを使いこなしていないひとを見るとイラっとする。パスワード認証大好き(もう21世紀ですよ)、
パスフレーズ入れるのが面倒(keychain使えよ)、放っといたssh接続が切れて「また切れた!」(screen使えよ)とか。
すいません、使いこなせてませんでした。
3台のサーバにSSHで接続したり、そもそもこのBlogはEmacsのTrampでssh接続して書いているというのに。
どう使いこなせていなかったかというと、ssh-agentと
keychainを導入してませんでした。
毎回パスフレーズをいれてたわけですな。
よく調べもせずに、セキュリティ的に大丈夫なのか不安だったので導入していませんでした。
マシンが一台増え、cron + rsync + sshでバックアップをとることにしたんで、良い機会なんで調べてみました。
まずはssh-agent と keychainがどういう物なのかから。
1.ssh-agentは一度パスフレーズを入力したら、ログインしている間はパスフレーズの入力が省略できる機能。
2.keychainは一度パスフレーズを入力したら、システムが再起動するまでパスフレーズの入力が省略できる機能。
と理解しました。
「keychainはアカウントをとられたら終わり?」という疑問から敬遠してましたが、
IBMの資料にある --clear オプションで不安もやわらぎました。
--clear オプションは新たなログインがあった時に、キャッシュをクリアするオプションです。
例えば SSH経由のrsync によるバックアップを毎晩cronに仕込んで置いた場合、
cronはログインはしないので、キャッシュされたSSH接続を使うことができます。
アカウントを奪われログインされた場合は、ログインした瞬間にSSH接続がクリアされるので、
他のマシンへパスフレーズの入力なしで接続される事はありません。
というわけで、
keychainをインストールして、下記の内容を~/.bash_profileに追加。
#!/bin/bash
#on this next line, we start keychain and point it to the private keys that
#we'd like it to cache
/usr/bin/keychain ~/.ssh/id_rsa ~/.ssh/id_dsa
source ~/.keychain/example.com-sh
これで一度ログインしてパスフレーズを入力しておけば、cronからもパスフレーズなしでSSH接続出きるようになります。
後は再起動時に忘れずにログインするような仕組みを作ればOK。
この仕組みはみんなどうやって実現してるのかな?