Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

事前準備

IAM Management Console」に登録して API のアクセスキーを発行し、~/.aws/config に保存しておく。
この時に role をあたえていなくて 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 host..."
  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 の組み合わせでやりましたが、ec2sshgrep -E '^Host[[:space:]]+[^*]' ~/.ssh/config | peco | awk "{print \$2}" | xargs -o -n 1 ssh の組み合わせでもいいと思います。

ではでは。

dealforest
Freelance iOS developer, create Tuna and Cichlid of Xcode Plugin
http://blog.dealforest.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away