pecoとconfigでsshを楽にする

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 !~ "[<em>?]") {
print $i
}
}
}
' ~/.ssh/conf.d/</em>| 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</code>

$ 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 &gt; ~/.ssh/config

$ chmod u+x ~/.ssh/makeconfig.sh
$ ~/.ssh/makeconfig.sh

以上です。
conf.d配下のconfigを追加編集したら、都度makeconfig.shを実行すれば更新されます。

pecoを使ってsshしてみる。

peco

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

以上。

Homebrewインストール手順

homebrewというコマンドラインでの、パッケージインストーラ?のインストール手順です。

#Xcodeのインストール

Macの開発者ツールかと思いますが、こちらをインストールします。
$ xcode-select –install

rubyコマンドでターミナルからインストールします。
#brewのインストール
$ ruby -e “$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)”
Whoops, the Homebrew installer has moved! Please instead run:

ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

Also, please ask wherever you got this link from to update it to the above.
Thanks!

私の場合エラーが表示されましたので、言われた通りのコマンドを実行します。

$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/…
/usr/local/share/man/man1/brew.1

Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/mkdir /usr/local
Password:
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local
==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew
==> Downloading and installing Homebrew…
remote: Counting objects: 3558, done.
remote: Compressing objects: 100% (3407/3407), done.
remote: Total 3558 (delta 35), reused 1473 (delta 19), pack-reused 0
Receiving objects: 100% (3558/3558), 2.70 MiB | 2.47 MiB/s, done.
Resolving deltas: 100% (35/35), done.
From https://github.com/Homebrew/homebrew
* [new branch] master -> origin/master
HEAD is now at 0296162 shadowsocks-libev: update 2.2.0 bottle.
==> Installation successful!
==> Next steps
Run `brew help` to get started

successfulが表示されたので「brew」コマンドが使用できるようになります。