LoginSignup
8
7

More than 5 years have passed since last update.

sshのconfigからpeco/fzfでssh login(n番煎じ)

Last updated at Posted at 2016-04-18

すでにいくつもある~/.ssh/configからHostを抽出して、fzfpecoで選択しての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に食わすだけ。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7