/
カテゴリー

解説

Linuxには、SSHの鍵情報をキャッシュし、次回からの接続を楽にしてくれる仕組みとしてSSH Key Agentというものがあります。 SSH接続を試みた際に鍵情報が指定されていなかった場合、GNOME Keyring に付属しているSSH Key Agentは .ssh/ 以下にある鍵を自動的に拾ってきて適切な鍵がないかどうか試しますが、この時実際にSSHサーバに認証を飛ばします。そして全ての鍵が無効だった場合、次の認証メソッドとしてパスワード認証などに移っていきます。
SSHサーバは通常1セッションあたりの認証試行上限回数が定められており、デフォルト値は6となっています。(https://man.openbsd.org/sshd_config#MaxAuthTries) .ssh/ 以下にある候補鍵の数が6以上かつ、その鍵ペア全てが無効な鍵だった場合、鍵を全て試し終わった時点で失敗回数は6回となります。この状態で次の鍵認証をリクエストしても既に試行上限を超えているため、常に Too many authentication failure のメッセージが返ってくる、というのが今回発生しているトラブルの原因です。

これを解決するには、公開鍵を明示的に指定して接続 (IdentityFile) すれば良いですが、~/.ssh/configに登録されていないサーバに接続するときも~/.ssh/以下にある鍵を試してしまうため、公開鍵が登録されていないサーバに接続することができなくなってしまいます。 この問題を回避するために、IdentitiesOnly というパラメータを設定することによって公開鍵認証に用いる鍵を明示的に指定する (IdentityFile に指定された鍵のみ使う) ことができます。 今回の問題設定では IdentityFile のみの指定や、使用されていない鍵 (~/.ssh/mars 等) の退避によっても終了条件を満たすことができますが、将来的に発生しうる問題を考慮する場合は IdentitiesOnly の指定をする方が望ましいです。

採点基準

  • 原因を説明できている 50%
    • Too many authentication failure が発生する原因 (試行した鍵が多すぎる) ことに言及
  • 接続できるようになっている 50%
    • 192.168.19.10
    • 192.168.19.20
    • これらへのSSH接続ができればよい