SSHをちょっとだけ楽にする

~/.ssh/configを次のように書いているとする。
実際開発していると複数台アプリケーションサーバーがあってミドルウェアが入っているサーバーがあってとか気づくとたくさんのサーバーのconfigが追加されている。

Host bastion
  HostName www.xxx.yyy.zzz
  User hoge
  IdentityFile ~/.ssh/hoge.pem

Host server1
  HostName xxx.xxx.xxx.xxx
  User fuga
  IdentityFile ~/.ssh/fuga.pem
  ProxyCommand ssh -CW %h:%p bastion

Host server2
  HostName yyy.yyy.yyy.yyy
  User piyo
  IdentityFile ~/.ssh/piyo.pem
  ProxyCommand ssh -CW %h:%p bastion

だいたいはhistoryからgrepしたりするんだけど、あのサーバーなんだっけなぁーとかたまにしか使用しないのって忘れてしまって~/.ssh/configを見たりする。
その作業が意外と多いので止めたいと思った。

使用するのはおなじみのpeco!!
「pecoは標準入力から受けた行データをインクリメンタルサーチして選択した行を標準出力に返す」
ただこれだけのシンプルなものです。

github.com

今回はHostだけを取り出したいので次のようなコマンドを実行する。
* を外しているのはHost 127.*のようなものを外すためです。

$ grep "^Host " ~/.ssh/config | sed s/"^Host "// | grep -v "*"
bastion
server1
server2

あとはこれをpecoに突っ込んで選択したものをsshにかける。

ssh $(grep "^Host " ~/.ssh/config | sed s/"^Host "// | grep -v "^\*$" | peco)

最後に任意のaliasをはってあげれば完了!!
これで少し便利になった。

最後に

peco便利だ