| この記事の要点 |
|
接続方法の比較
| 方法 | 準備 | 向いている場面 |
|---|---|---|
| コンソールの「SSH」ボタン | 不要(ブラウザで開く) | とりあえず中に入りたい、鍵の登録作業をしたい |
gcloud compute ssh | Google Cloud CLI のインストールとログイン | 鍵の作成・登録を自動でやってほしい |
| ssh クライアント + 自分の鍵 | 鍵の作成とメタデータへの登録(本記事の手順) | 普段の ssh・scp・rsync、VS Code Remote などのツールから接続したい |
手軽さだけなら gcloud が便利ですが、普段使いの ssh クライアントや他のツールからそのまま接続したい場合は、以下の手順で鍵を登録します。
ローカルの作業: 鍵を作成する
ローカル PC(Mac・Linux、Windows なら PowerShell)で鍵を作成します。
ssh-keygen -t ed25519 -C "ユーザー名" -f ~/.ssh/gce_key
# RSA を使う場合
ssh-keygen -t rsa -b 4096 -C "ユーザー名" -f ~/.ssh/gce_key
鍵の作成コマンドの詳しい使い方は ssh-keygen を参照してください。
※ユーザー名はローマ字(半角英小文字・数字)にすること。GCE では、公開鍵の末尾に付くこのコメントがログインユーザー名として使われ、存在しないユーザーなら VM 上に自動で作成されます。コンソールの SSH ボタンで入ったときのユーザー名と同じにすれば、同じホームディレクトリを使えます。
作成されると秘密鍵 gce_key と公開鍵 gce_key.pub の 2 つができます。サーバーに登録するのは .pub の方だけです。
cat ~/.ssh/gce_key.pub
# ssh-ed25519 AAAAC3Nza...(長い文字列)... ユーザー名
サーバー(GCP)の作業: 公開鍵を登録する
方法 A: VM インスタンス単位で登録
- Google Cloud コンソールで「Compute Engine」→「VM インスタンス」を開く
- 対象のインスタンス名をクリックし、「編集」を押す
- 「SSH 認証鍵」(セキュリティとアクセス)の項目で「項目を追加」を押す
- 先ほど表示した公開鍵の内容を1 行まるごと貼り付けて保存する
方法 B: プロジェクト全体で登録
「Compute Engine」→「メタデータ」→「SSH 認証鍵」に登録すると、プロジェクト内の全 VM(プロジェクト全体の鍵をブロックしていないもの)で使えます。
方法 C: VM 内で authorized_keys に追記
コンソールの SSH ボタンでサーバーへ入り、~/.ssh/authorized_keys に公開鍵を追記する方法もあります。ただし、GCE のゲスト環境がメタデータの鍵を管理しているため、メタデータ経由の登録のほうが確実です。
画面の名称はコンソールの更新で変わることがあります(2026 年時点の表記)。
ローカルから接続する
外部 IP はインスタンス一覧の「外部 IP」列で確認できます。まずはコマンドで直接接続してみます。
ssh -i ~/.ssh/gce_key ユーザー名@外部IP
毎回入力するのが面倒なら、~/.ssh/config に以下の記述を追加します。
Host 適当なホスト名
HostName GCPのインスタンス選択画面で表示される外部IP
User 鍵作成時に指定したユーザー名
Port 22
IdentityFile ~/.ssh/gce_key
IdentityFile の部分は、鍵の作成時に指定したファイル名に合わせます。続けて以下のコマンドを実行して接続します。
ssh 上記で指定した適当なホスト名
gcloud コマンドで接続する場合
gcloud compute ssh インスタンス名 --zone=asia-northeast1-b
初回実行時に鍵(~/.ssh/google_compute_engine)が自動で作成・登録されます。ユーザー名はローカルのユーザー名が使われます。
つながらないときのチェックポイント
| 症状 | 確認すること |
|---|---|
| Permission denied (publickey) | ユーザー名が鍵のコメントと一致しているか、IdentityFile の指定、OS Login が有効になっていないか |
| Connection timed out | VPC のファイアウォールルールで TCP 22 番が許可されているか、外部 IP が付いているか、VM が起動しているか |
| 以前は入れたのに急に入れない | VM の停止・起動で外部 IP(エフェメラル)が変わった。固定したい場合は静的 IP を予約する |
| UNPROTECTED PRIVATE KEY FILE | 秘密鍵の権限が緩い。chmod 600 ~/.ssh/gce_key |
OS Login(メタデータ enable-oslogin=TRUE)が有効なプロジェクトでは、メタデータの SSH 鍵は無視され、Google アカウントの IAM 権限で認証します。組織のポリシーで有効化されていることもあるので、鍵を登録しても入れないときは確認してください。
セキュリティ上の注意
- 秘密鍵は他人に渡さない・リポジトリにコミットしない
- ファイアウォールの送信元を
0.0.0.0/0(全開放)ではなく、自宅や会社の IP に絞るとより安全 - 使わなくなった鍵はメタデータから削除する
関連
- 【GCP/GCE】SSHでPermission denied (publickey).
- Linux/Mac → Linux サーバ SSH 鍵認証完全ガイド(ssh-keygen / ssh-copy-id / config)
- SSH 完全ガイド — 認証/鍵/config/トンネル/ポートフォワード
- 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