読者です 読者をやめる 読者になる 読者になる

.ssh/configをバックアップ(?)するツール sconb を作ってみた

.ssh/configの管理が面倒すぎる

CLISSHな環境に身をおいていると、

  • 開発案件が増えるたびに.ssh/configを追加
  • AWSのIAMを作成するたびに.ssh/configを追加
  • Vagrantでサーバを作成するたびに必要な.ssh/configを追加。

さらに、

  • こっちの環境には.ssh/configを設定したけど、こっちの新しい環境には一部設定していない
  • 設定していたサーバが壊れてしまった
  • あれ?あのIAMの秘密鍵どこ?

よくあります。

とりあえず、バックアップはしておきたい。 バックアップはしたいけれども、秘密鍵は別ファイルだし、追加や更新も面倒な構造なのでなんとかしたい。

バックアップしたら簡単にリストアしたい。

ということで作ってみました。

sconb

k1LoW/sconb · GitHub

"Ssh CONfig Buckup tool"の略です。

(ssh_config_buckupと名付けようとしていて、ふと目を細めてみたらスコンブが見えました)

$ gem install sconb

sconbコマンドが使えるようになります。

使い方

例えば .ssh/configをバックアップしたいと思ったら

$ sconb dump > ssh_config.json

という感じで.ssh/configをJSONファイルでダンプできます。リストアは

$ sconb restore < ssh_config.json > ~/.ssh/config

とすれば、OK。

いわゆる .ssh/config <=> JSONの相互変換ですね。

さらに、 .ssh/configと複数ある秘密鍵とまとめて1ファイルでバックアップしたいときは--allオプションをつけて、

$ sconb dump --all > ssh_config_with_keys.json

で、1ファイルにバックアップできます。

秘密鍵の再生成は、

$ sconb keyregen < ssh_config_with_keys.json

で、一気に秘密鍵を設置します。

当然、生成されたJSONファイルは慎重に管理する必要がありますが、これだけでも結構楽です。

JSONにするととてもうれしいこと

そう、jqが使えます。

Hostが"github"のconfigだけ切り出してダンプ

$ sconb dump | jq '{"github"}' > github.json

もらったgithub.jsonを.ssh/configに追記

$ sconb restore < github.json >> ~/.ssh/config

2つの.ssh/configなJSONをマージ

$ jq -s '.[0] + .[1]' current.json merge.json | sconb restore > ~/.ssh/config

なかなか良いです。

とりあえずこれでぐちゃぐちゃだった.ssh/configを複数環境の設定をまとめてから整理できました。

というか

やっぱり皆さんは、.ssh/をtarで固めて管理とかしているんですかね。

もっとスタンダードな方法があったりしそう。

とりあえず自分はsconbで快適です。

オススメ

Fukuoka.rbは、PHPerでも受け入れてくれるとても良いもくもく会です。

最新Ruby事情からDockerまで、とても緩やかに情報が流れているので福岡の人はオススメです。