キアラの備忘録

雑多なメモを書いていきます

ssh コマンドで host名を補完する

■前提

  • /.ssh/known_hosts がハッシュ化されていない

■内容

~/.bashrc に以下のように記載することで、補完が可能になります。

$ cat ~/.bashrc

function _complete_ssh() {
  if [ -f $HOME/.ssh/known_hosts ]; then
    local cur=${COMP_WORDS[COMP_CWORD]};
    COMPREPLY=( $(compgen -W "`cat $HOME/.ssh/known_hosts | tr ',' ' ' | cut -d' ' -f1`2"-- $cur))
  fi
}

complete -F _complete_ssh ssh

■使用例 ssh w を打ったところで、[tab]キーを押すと、wから始まるホストのみが候補として出て、該当が1件の場合、補完がされる。

■ ~/.ssh/known_hosts の表記例

以下のようにhash化されていない場合のみ使用可能

$ cat ~/.ssh/known_hosts
web01,10.0.0.2 ssh-rsa AA...

■雑記

~/.ssh/known_hosts をハッシュ化した場合の運用の実例は、誰か記事にしているでしょうか?

アクセス可能なIPが分かりずらいのは、サーバーに入られたときに、そこを踏み台に 悪さされるのを難しくはできるでしょうが、今思いつく限りでは運用が面倒になりそうな気がして...

■参考になった記事