sshの設定はすべて ~/.ssh/config で済ませたい派で、共通化したい設定はすべて Host * でまとめておけばいい とばかり思ってたけど、問題に当たったのでメモ。

つまり、IdentityFileの行は重複するけど、個別に設定すべし

~/.ssh/config
Host *
  IdentitiesOnly yes
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa
Host sub.github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_sub

SSHの接続先が多いがすべて同じ鍵で接続できていたので、以下の様に設定していた。

~/.ssh/config
Host *
  # ここに鍵設定
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Host example
  HostName example.com
  User example

そこで、GitHubのアカウトを複数扱う必要があり、鍵設定がいることになり、以下のように設定したとする

~/.ssh/config
Host *
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Host example
  HostName example.com
  User example

Host github.com
  HostName github.com
  User git

Host sub.github.com
  HostName github.com
  User git
  # このケースだけ違う鍵を使いたい
  IdentityFile ~/.ssh/id_rsa_sub

これだとうまく動かない!!
(sub.github.com でアクセスしてるのに効いていない!)

ssh -T github.com
Hi tro3373! You've successfully authenticated, but GitHub does not provide shell access.
ssh -T sub.github.com
Hi tro3373! You've successfully authenticated, but GitHub does not provide shell access.
# ↑同じユーザになってる!

考察

以下のように共通で設定すると、sshの共通設定として、鍵を指定してしまう。

Host *
  IdentityFile ~/.ssh/id_rsa

これはつまり、共通指定した鍵を各接続先でTryするということ。

接続先に不要なチャレンジを実施してしまうことになるし、 GitHubの場合はそれでメインのアカウントが存在するので、 うまく動作しないことになる。

少し冗長になるが、IdentityFile部分は各接続先毎にちゃんと設定すべし。

ちなみに IdentitiesOnly を指定するから動くのでは?と思ったが、こちらのオプションは 指定した秘密鍵のみを使用するかどうか(yes, no)
共通設定として、指定しているので、どちらも有効になる為、問題解決に至らなかった。