gcloud compute ssh でサーバに接続できなくなった(Permission denied (publickey,gssapi-keyex,gssapi-with-mic))原因と解決策


はじめに

原因調査にかなり苦戦したので、備忘録も兼ねて記事として公開します。
同様の事象に悩まされている方の参考になれば幸いです。

起きた問題

  • 一部のメンバーが、特定のサーバにSSHで接続できない
    • 接続できないのは、新規参入メンバーや直近でPCを新しい端末に交換したメンバーのみ
    • 問題なく接続できるサーバもある
  • 認証鍵ファイル(google_compute_engine, google_compute_engine.pub)を作り直しても直らない

環境

  • 接続先サーバ: CentOS7
  • 接続元PC: macOS Big Sur

接続しようとした際のエラーメッセージ

# SSH接続しようとすると、
gcloud compute ssh --zone "asia-northeast1-b" "VM_NAME" --project "PROJECT_NAME"

# 以下のようなエラーが出力され、接続できない
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

解決策

SSH接続する際のユーザー名を指定することで解決しました。

gcloud compute ssh --zone "asia-northeast1-b" "USERNAME@VM_NAME" --project "PROJECT_NAME"

参考:https://cloud.google.com/compute/docs/instances/ssh#metadata-managed_ssh_connections

原因

接続先サーバ側で、ユーザーの作成に失敗していたのが原因でした。

  • 接続できないユーザーのローカルマシン(Mac)のユーザー名は数字のみ(例: 1234)
    ※端末の管理上、管理番号や社員番号等でユーザー作成されている場合など
  • gcloudコマンドでは特にユーザー名を指定しない場合、デフォルトでローカルのユーザー名が使われる
  • gcloudコマンドで初めてSSH接続する際、接続先サーバ側でユーザー作成が行われる
  • Linuxではユーザー名の先頭に数字を指定することはできない

以上のことから、数字から始まるユーザー名でユーザー作成に失敗し、結果的に権限がない旨のエラーを返していたのが原因と思われます。

補足:一部問題なく接続できていたサーバはOSのバージョンが少し古かったので、数字のみのユーザー名でもユーザー作成できていたようです。