すでにいくつもある~/.ssh/config
からHostを抽出して、fzf
かpeco
で選択してのssh
ログインするスクリプト。
色々参考にしつつ、一応自前で作成したもの。
改良点としては、
- ワイルドカード(?、*)無視
- 1つのHostにある、複数項目も選択肢に出る
- 引数でfizzy query+1だけなら即接続させる
になるようになってること。
ssh-select.sh
#!/bin/sh
host=""
# need backslash escape? ... currently not use backslash
if which fzf >/dev/null 2>&1; then
host=$(grep -iEh "^host[[:space:]]" ~/.ssh/config ~/.ssh/conf.d/*.conf | sed -e 's/host[[:space:]]\(.*\)/\1/i' | tr ' ' '\n' | grep -v -e '[*?]' -e '^[[:space:]]*$' | fzf --prompt="Host\\> " --query="${*}" --select-1 | xargs -n 1)
# use OPT env --ansi --reverse
elif which peco >/dev/null 2>&1; then
host=$(grep -iEh "^host[[:space:]]" ~/.ssh/config ~/.ssh/conf.d/*.conf | sed -e 's/host[[:space:]]\(.*\)/\1/i' | tr ' ' '\n' | grep -v -e '[*?]' -e '^[[:space:]]*$' | peco --prompt="Host\\> " --query="${*}" --select-1 | xargs -n 1)
else
echo "selector not found"
fi
if [ ! -z "$host" ]; then
echo "Connect " "$host"
ssh "$host"
fi
# EOF
なお、Windows上では、以下のラッパー経由で呼び出す(同じ所に置く)
ssh-select.bat
@echo off
sh %~dp0ssh-select.sh %*
バッチ上で同じ動作を実現するのが、すごい面倒だったので、単にsh
に食わすだけ。