Peco & ec2list で快適にEC2インスタンスにSSHする

By | 2014年7月1日

AWSのAPIをカジュアルに」の 24 ページ目に”Unix的な小道具を作る”とあるのですが、これがとても便利そうでした。
何をするのかというと EC2 インスタンスの一覧を取得し、選択したホストに SSH します。
というわけでさっそく Zsh に設定してみました。

事前準備

IAM Management Console」に登録して API へのアクセスキーを発行し、~/.aws/config に保存しておきます。
ここで Policy の設定をミスっていて API にアクセスできなかったので確認しておくと変にはまらないかと思います。

Peco をインストール

Homebrew を使っている場合

$ brew tap peco/peco
$ brew install peco

Go の環境がある場合

$ go get github.com/peco/peco/cmd/peco

ec2list をインストール

$ gem install ec2list

(※) ec2list は memoize しているので毎回リクエストが発生するわけではありません。

$ ec2list

これで一覧が表示されていれば成功です。
default 以外の profile を使用する場合は以後、 s/ec2list/ec2list –profile [profile名]/ で置換してください。
エラーがでる場合は Policy の設定がおかしいか、~/.aws/config の設定がおかしいかだと思います。

Zsh の設定

$ ec2list | peco | cut -f 3 | xargs -o -n 1 ssh

このコマンドで選択したホストに SSH ができれば成功です。
毎回これを実行するのもめんどくさいので alias か、もしくは keybind を設定しておけば幸せになれるかと思います。

alias

[~/.zshrc]
 
alias peco-ec2ssh="ec2list | peco | cut -f 3 | xargs -o -n 1 ssh"

keybind

[~.zshrc]
 
function peco-ec2ssh() {
  echo "Fetching ec2 hosts..."
  local selected_host=$(ec2list | peco | cut -f 3)
  if [ -n "${selected_host}" ]; then
    BUFFER="ssh ${selected_host}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-ec2ssh
 
bindkey '^q' peco-ec2ssh

これで ^q を押せば SSH できるようになりました。
便利ですね。

Peco と ec2list の組み合わせでやりましたが、ec2ssh‘$ grep -E ‘^Host[[:space:]]+[^*]’ ~/.ssh/config | peco | awk "{print \$2}" | xargs -o -n 1 ssh’ の組み合わせでもいいと思います。

ではでは。