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

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 peco-ec2ssh="ec2list | peco | cut -f 3 | xargs -o -n 1 ssh"


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
  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 の組み合わせでもいいと思います。


Freelance iOS developer, create Tuna and Cichlid of Xcode Plugin
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