Macユーザーになって数年経つのですが、Pecoというツールを知ったのはついこの間です。
PecoはMacやLinuxにインストール可能なフィルタリングコマンドです。

具体的には、Gitのリポジトリを管理しているディレクトリで、文字を入力することなく対象ディレクトリへアクセスしたり、今回ご紹介するSSHのコマンドを省略できたりする便利ツールです。

ツールそのものはとてもシンプルで、きっと他にも活用例があると思いますが、今回はSSH接続の例でご紹介します。

環境はMacを想定しておりますが、インストール以外は基本使い方は一緒だと思います。

環境

MacOS 10.11

インストール方法

$ brew install peco

これだけです。

シェルのconfigファイルに下記を追記

※私の場合は.zshrcでしたがbashであれば.bashrcです。

$ vim ~/.zshrc
# peco&ssh
function peco-ssh () {
  local selected_host=$(awk '
  tolower($1)=="host" {
    for (i=2; i<=NF; i++) {
      if ($i !~ "[*?]") {
        print $i
      }
    }
  }
  &#039; ~/.ssh/conf.d/*| sort | peco --query "$LBUFFER")
  if [ -n "$selected_host" ]; then
    BUFFER="ssh ${selected_host}"
    zle accept-line
  fi
  zle clear-screen
}//
zle -N peco-ssh
bindkey &#039;SS&#039; peco-ssh
$ sourc ~/.zshrc

これで”SS”とキーボードで入力すると、~/.ssh/configが読まれます。

sshのconfig管理

sshクライアントのconfigではconf.dのようなinclude機能はないようで、他の方のを参考にしたところ、一番分かりやすい方法がありましたのでそれを私は採用しました。

$ mkdir ~/.ssh/conf.d
$ cd ~/.ssh/conf.d
$ vim config
## ここにホスト以外の共通の設定を記載する。 
## Host * ServerAliveInterval 10
TCPKeepAlive yes 

グループごとに◯◯.confを作成して、通常どおりconfigを記載する。
最後に~/.ssh/configに記述するスクリプトを作っておく。

※手でコマンド入力しても良いですがこっちのほうが楽です。

$ vim ~/.ssh/makeconfig.sh 
#!/bin/bash cat ~/.ssh/conf.d/config ~/.ssh/conf.d/*.conf > ~/.ssh/config
$ chmod u+x ~/.ssh/makeconfig.sh
$ ~/.ssh/makeconfig.sh

以上です。

pecoを使ってsshしてみる。

peco

こんな感じでホスト一覧が出るので、キーボードで選択するor文字を入力して対象を絞ることができ、そのあとはsshコマンドを入力したのと同じになります。
とても便利ですのでホストをコピペしている人はお試しあれ。

以上。