普段使っているマシンを移行した後で、各所のauthorized_keysをアップデートし忘れててログインできなくて焦る。 そんな経験をしたことはありませんか?
私は多々ありますorz
まー旧マシンでログインできたところに入れれば良いので
- 新マシンで鍵ペアを作成
- 新マシンの公開鍵を旧マシンにコピー
- 旧マシンからログインできるところ全部のauthorized_keysに新マシンの公開鍵を追加
という作業をすれば良いんですが、1、2は良いんですが3が面倒なんですよね。特に移行作業の途中でログインして作業しなきゃいけなくなって中途半端にauthorized_keysに登録してるところがあったりすると、どのマシンを更新しなきゃいけないのか分からなくなったりしてなかなかやる気もでません。
というわけで、ansibleでちゃちゃっとやってしまいましょう。
playbookはこんな感じです。
私の場合は、新マシンの公開鍵を旧マシンのauthorized_keysに登録してたのでkey
の値がauthorized_keysになっていますが
ここは各自旧マシンで公開鍵を保存した時のパスを入れてください。
- hosts: all tasks: - ansible.posix.authorized_key: user: "{{ ansible_user_id }}" key: "{{ lookup('file', lookup('env', 'HOME')+'/.ssh/authorized_keys') }}" throttle: 1
でもって実行はこんな感じで、~/.ssh/config
に書かれてあるHost全部に対して実行します。
ansible-playbook -i $(awk '/^Host/{printf $2","}' ~/.ssh/config) authorized_keys.yml
接続先ホストを雑に取ってきてるので、例えば$HOMEを共有しているホストが複数configに入ってるようなこともあるかもしれませんが、その辺はplaybook側にthrottle: 1
をつけて1ホストづつ実行することでrace conditionを避けるようにしています。
私の場合、移行するわけじゃなくて2台併用するんで今後接続先ホストが増えたら面倒なことになりそうですが、その時はその時で・・・