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
}
}
}
' ~/.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 'SS' 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してみる。
こんな感じでホスト一覧が出るので、キーボードで選択するor文字を入力して対象を絞ることができ、そのあとはsshコマンドを入力したのと同じになります。
とても便利ですのでホストをコピペしている人はお試しあれ。
以上。