| この記事の要点 |
|
エラー内容
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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38