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)
共通設定として、指定しているので、どちらも有効になる為、問題解決に至らなかった。