ssh_config を使うことでsshの接続先毎にキーやデフォルトユーザーを設定できて便利なのですが、ホストが増えてくると「あれ?このサーバーなんて名前で設定したっけ?」となりがちです。
命名規則を決めたりして覚えやすくするのもいいのですが、自分はそんなヒューマンスキル高くないのでスクリプトでカバーします。
sshコマンドでホスト名の補完がきけばいいのですが、sshコマンドをそのまま使いたいときに不便なので、
今回はsshc(completeの略で…)というエイリアスを作成して sshc
エイリアスを作成するのでついでに-Fオプションを付けてconfigファイルの指定もつけておきます。
~/.ssh/complete
#!/bin/bash _ssh_list(){ OLDIFS=$IFS IFS=$'\n' OUT="" for ITEM in `grep "Host " ~/.ssh/config | sed -e "s/ \+/ /g" |cut -f2 -d" "` do OUT="${ITEM} ${OUT}" done IFS=$OLDIFS echo ${OUT} } _ssh_comp() { local cur cur=${COMP_WORDS[COMP_CWORD]} if (( $COMP_CWORD <= 1 )); then COMPREPLY=($( compgen -W "`_ssh_list`" -- $cur )) else COMPREPLY=() fi } alias sshc="ssh -F ~/.ssh/config" complete -o bashdefault -F _ssh_comp sshc
~/.bash_profile
#一行追加 source ~/.ssh/complete
これでssh_config を設定しておけば sshc ${hostname} で指定のホストにシェルアクセスできるようになり、hostname部分はタブで補完が効くようになります。