Help us understand the problem. What is going on with this article?

ssh_configでの落とし穴

More than 1 year has passed since last update.

SSHの設定

実例をいれつつ、というより流用できるように、なので例が長くなります。
なにか発生するたびに実例を追加していく予定。

TL;DR

man ssh_configを読みましょう。
あと、ssh_configは重複があると最初の項目が優先1です。

落とし穴1

sshでgithubで複数アカウントをやるとして、

# Github
Host github.com
  # Alt/Use for Over HTTPS at 443
  # Hostname ssh.github.com
  # Port 443
  Hostname github.com

# gist(use ssh)
Host gist.github.com
  # Over HTTPS
  # Hostname ssh.github.com
  # Port 443
  Hostname gist.github.com

# altssh server direct setting
Host ssh.github.com
  Hostname ssh.github.com
  Port 443

# 2nd or later account
# Example
Host example.github.com
  Hostname github.com
  # key define : first match check
  IdentityFile ~/.ssh/id_rsa.github.example

# github common setting
Match originalhost github.com,gist.github.com,ssh.github.com
  IdentityFile ~/.ssh/id_ecdsa.github
  IdentityFile ~/.ssh/id_ed25519.github
  # fallback
  IdentityFile ~/.ssh/id_rsa.github

# github global setting
Host *github.com
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes
  Compression yes
  # Note:key
  # https://api.github.com/users/tsuyoshicho/keys

ここでハマったのは、前はMatchではなく*github.comへメインアカウントの鍵ファイルを定義していたことです。

こうすると、2ndアカウントの鍵の定義が

$ ssh -G git@example.github.com
user git
hostname github.com
 <中略>
identityfile ~/.ssh/id_rsa.github.example
identityfile ~/.ssh/id_ecdsa.github
identityfile ~/.ssh/id_ed25519.github
identityfile ~/.ssh/id_rsa.github
 <後略>

になるんですが、これが穴です。

期待としては、ここで選んだ鍵で(先頭から)接続するはずで、それは問題ないですが、ここにssh-agentがからむと鍵の選択が適切に実施される保障がないようです。(メインアカウントRSAで繋がった、たぶんssh-addした順にssh-agentが選択してしまうっぽい)

なので、メインアカウントでの接続の鍵はMatch節にまとめるようにしました。あとそのときはoriginalhostである必要もあるので注意。

落とし穴2

# operation server
Host op.example.com
  User tsuyoshicho
  TCPKeepAlive yes
  IdentitiesOnly no
  PubkeyAuthentication no
  ProxyCommand none

# server instance
Host dev1.example.com
  Hostname [2001:db8::1]
  User tsuyoshicho
  TCPKeepAlive yes
  # key define : first match check
  IdentityFile ~/.ssh/id_rsa.example
  IdentitiesOnly yes
  ProxyCommand none

operation serverは公開鍵認証はないサーバなのですが、ここで鍵が指定されてないだけだと、ssh-agentとやり取りしてToo many authentication failuresになってしまう。

解決方法としては公開鍵認証だけの指定を止める(IdentitiesOnly)だけではなく、公開鍵認証を止める(PubkeyAuthentication)こと。

別の方法としてPreferredAuthenticationsで公開鍵認証よりパスワード認証を先にする(もしくは公開鍵認証を外す)、というのもあるが、ちょっとアレなのでそれはなし。

おまけ

なお、このサーバは内部ネットワークなので最後にHost *で全サーバに設定しているProxyCommandの設定が不要なのだが、ここだけ外すにはnoneを明示してしまうという方法が有効。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした