.ssh/config からサーバ名で ssh 接続できるような alias を作成する

.ssh/config にまとまっているサーバ情報からサーバ名で ssh 接続できるエイリアスを一括作成してみた。エイリアスにするとタブ補完も効くので嬉しい(実際には githubssh 許可していないので例)

$ cat ~/.ssh/config
############################################################
# github
############################################################
Host github
  HostName        github.com
  IdentityFile    /Users/kyagi/.ssh/id_rsa_github
  User            git

############################################################
# bitbucket
############################################################
Host bitbucket
  HostName        bitbucket.org
  IdentityFile    /Users/kyagi/.ssh/id_rsa_bitbucket
  User            git

############################################################
# sakura
############################################################
Host sakura
  HostName       aaa.bbb.ccc.ddd
  IdentityFile    /Users/kyagi/.ssh/id_rsa_sakura
  User            kyagi

こんな感じ。bash有機能のプロセス置換 <() を使っているのでスクリプトにする時は shebang を #!/bin/sh でなくて #!/bin/bash にする必要がある。

$ paste <(grep ^Host config) <(grep HostName config) <(grep 'User ' config) | awk '{ printf("alias %s=\"ssh -A %s@%s\"\n", $2, $6, $4); }'
alias github="ssh -A git@github.com"
alias bitbucket="ssh -A git@bitbucket.org"
alias sakura="ssh -A kyagi@49.212.38.52"

https://gist.github.com/3899895

プライベートレポジトリは github だと課金が必要だけど、bitbucket だと無料なので、 github はパブリク用、bitbucket はプレイベート用と使い分けるようにしている。