わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

sshやscpのhost名を自動補完する

.bashrcにはよく使うディレクトリにパッと移動できるように絶対パスでaliasを貼ってる。以下のような感じ

alias GR="cd /User/kimikimi714/Documents/git_repo"

これと同じような感じで以下のようにssh接続先へのaliasも前は貼ってた。

alias dev="ssh example.dev.com"

これはこれで便利だったんだが、例えばscpしたい時とかにはhost名の補完が効かないので結局host名をフルパスで入れなきゃいけなくて結構面倒くさかったりする。そこでsshのhost名を補完する方法ってあるんじゃないかなぁと思って探したらやっぱりあった。

qiita.com

macの場合、brew install bash-completionでインストールした後、以下の行を.bash_profileに追記する。

if [ -f `brew --prefix`/etc/bash_completion ]; then
    . `brew --prefix`/etc/bash_completion
fi

これで~/.ssh/configに書いたhost名たちが補完されるようになる。で、例として以下のようなファイルだとすると

Host example.dev.com
  HostName 192.168.33.20
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/kimikimi714/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

$ ssh example.dev.comが補完されるようになる。scpとかでもhost名が補完されてめっちゃ便利。

ていうかaliasを貼るのはいけないことじゃないが、不用意にalias貼りまくるよりも既に道具として用意されてるものを上手に使っていきたいものだ。

2017-04-05 追記

kimikimi714.com

sshやscpの補完はまぁbash_completion使うのでいいけど、ディレクトリ移動だったら今時aliasよりはpeco使うなーと思った。