HPCメモ

HPC(High Performance Computing)に関連したりしなかったりすることのメモ書き

ansibleで公開鍵を配る

普段使っているマシンを移行した後で、各所のauthorized_keysをアップデートし忘れててログインできなくて焦る。 そんな経験をしたことはありませんか?

私は多々ありますorz

まー旧マシンでログインできたところに入れれば良いので

  1. 新マシンで鍵ペアを作成
  2. 新マシンの公開鍵を旧マシンにコピー
  3. 旧マシンからログインできるところ全部の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台併用するんで今後接続先ホストが増えたら面倒なことになりそうですが、その時はその時で・・・