| この記事の要点 |
|
エラー内容
user@203.0.113.10: Permission denied (publickey).
GCP(Google Cloud)の Compute Engine で作った VM インスタンスに、ターミナルや TeraTerm、PuTTY などの SSH クライアントで接続しようとしたときに表示されます。カッコ内の publickey は「サーバーが受け付ける認証方式は公開鍵認証だけで、その公開鍵認証に失敗した」という意味です。GCE の Linux イメージは初期状態でパスワード認証が無効なので、鍵が合わないと必ずこのエラーになります。
鍵の作成方法と接続方法はこちらのページを参照してください。
原因
GCE では、プロジェクトまたはインスタンスのメタデータに公開鍵を登録すると、VM 内のゲスト環境(エージェント)がその鍵を読み取り、鍵の末尾に書かれたユーザー名で Linux ユーザーを作成して ~/.ssh/authorized_keys に鍵を登録します。コンソールの「SSH 認証鍵」欄に貼り付ける公開鍵は次の形式で、末尾がユーザー名として扱われます。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... tanaka
この仕組みから、次のような原因が考えられます。
| 原因 | 確認ポイント |
|---|---|
| ユーザー名が日本語になっている | Windows で ssh-keygen を実行すると、コメントに「PC のユーザー名@コンピューター名」が入る。日本語のユーザー名だと Linux のユーザーとして作成できない |
| 接続時のユーザー名が違う | ssh ユーザー名@IP のユーザー名が、鍵の末尾のユーザー名と一致しているか。GCE 上に存在しないユーザー名を指定していないか |
| OS Login が有効 | メタデータ enable-oslogin が TRUE だと、メタデータの SSH 鍵は無視され、Google アカウントに紐づいた鍵と IAM 権限で認証される |
| 使っている秘密鍵が違う | -i で、登録した公開鍵とペアの秘密鍵を指定しているか |
| 秘密鍵のパーミッションが緩い | Linux / macOS で秘密鍵が他人から読める権限だと、ssh クライアントが鍵の使用を拒否する(UNPROTECTED PRIVATE KEY FILE の警告) |
| プロジェクト全体の鍵がブロックされている | インスタンスのメタデータ block-project-ssh-keys が TRUE なら、プロジェクトのメタデータに登録した鍵は使われない |
対処法
1. ローマ字のユーザー名を指定して鍵を作り直す
鍵の作成時に -C オプションでコメント(= GCE 上のユーザー名)をローマ字で明示します。
ssh-keygen -t ed25519 -f ~/.ssh/gce_key -C tanaka
作成された gce_key.pub の中身(1 行)を、Google Cloud コンソールの「Compute Engine」→ 対象の VM →「編集」→「SSH 認証鍵」に貼り付けて保存します。プロジェクト内のすべての VM で使う場合は「メタデータ」→「SSH 認証鍵」に登録します。
2. 鍵とユーザー名を明示して接続する
chmod 600 ~/.ssh/gce_key
ssh -i ~/.ssh/gce_key tanaka@203.0.113.10
ユーザー名は鍵の末尾に書いたものと同じにします。登録直後は VM 側に反映されるまで数十秒かかることがあります。
3. OS Login を使っている場合
OS Login が有効なプロジェクトでは、メタデータへの鍵登録ではなく、自分の Google アカウントに鍵を登録し、IAM で roles/compute.osLogin(管理者権限が必要なら roles/compute.osAdminLogin)のロールを付与する必要があります。ユーザー名もメールアドレスから自動生成されたもの(例: tanaka_example_com)になります。
gcloud compute os-login ssh-keys add --key-file=$HOME/.ssh/gce_key.pub
gcloud compute os-login describe-profile # posixAccounts の username を確認
4. gcloud compute ssh を使う
Google Cloud CLI(gcloud)が使えるなら、鍵の作成・登録・ユーザー名の決定をすべて自動で行ってくれる次のコマンドが最も確実です。OS Login の有無にも自動で対応します。
gcloud compute ssh INSTANCE_NAME --zone=asia-northeast1-b
原因を切り分ける方法
- OS Login の有効・無効と、登録済みの鍵を確認する
gcloud compute instances describe INSTANCE_NAME --zone=asia-northeast1-b \
--format="yaml(metadata.items)"
gcloud compute project-info describe --format="yaml(commonInstanceMetadata.items)"
ssh -vで詳細ログを表示し、どの鍵ファイルを試し、サーバーに拒否されたかを確認する(Offering public key の後に拒否されていれば、鍵自体またはユーザー名が合っていない)- それでも分からない場合は、コンソールの「シリアルポート 1(コンソール)」のログで、ゲストエージェントがユーザー作成に失敗していないかを確認する
- コンソールの「SSH」ボタン(ブラウザ SSH)で入れる場合は、VM 内で
ls -la /homeとcat /home/ユーザー名/.ssh/authorized_keysを確認し、ユーザーと鍵が作られているかを見る
関連
- GCP/GCE に SSH 接続する方法
- SSH よくあるエラー集と対処完全ガイド — Permission denied/Host key/Timeout
- ssh-keygen の使い方|Ed25519 の鍵作成・公開鍵の登録・パーミッション
- Linux/Mac → Linux サーバ SSH 鍵認証完全ガイド
- TeraTerm 完全ガイド (SSH/マクロ/鍵認証)
子ページはありません
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09