[秘密鍵/公開鍵]GCPにSSHで接続する方法

【秘密鍵:公開鍵】GCPにSSHで接続する方法

こんばんは、エンジニアの眠れない夜です。

GCPにSSHで接続する方法をSSH接続に慣れていない方向けに説明します。

GCPにSSHで接続するまでの全体像

  1. ローカルPCで秘密鍵/公開鍵を作成します。
  2. GCPのインスタンスにローカルの公開鍵を登録します。
  3. ローカルPCからGCPインスタンスに秘密鍵を使って接続します。

イメージとしては勘合貿易です。

【図解】GCPにSSHで接続する方法0

  1. 秘密鍵と公開鍵を作成
  2. 相手に公開鍵(右側)を渡す
  3. アクセスするときは秘密鍵(左側)を持って一致するか確認

これで秘密鍵/公開鍵の仕組みは二度と忘れませんね!

ローカルPCで秘密鍵/公開鍵を作成します。

まずは自分のPCのターミナルで下記のコードを実行して秘密鍵/公開鍵を作成します。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

your_email@example.comは適宜置き換えてください。

※ @の前がSSHでサーバーにログインするときのユーザー名になります。

3回入力を求められます。

  • 1回目は保存場所(ファイル名)
  • 2回目と3回目はパスワード

(SSHを作成するのが初めてで面倒な人はEnterを3回押せば鍵を作れます。)

 

1回目の質問はファイル名を指定

1回目の質問時にファイル名を変更すれば新規で秘密鍵/公開鍵を作成できます。

1回目のファイル名を指定した後に同じファイル名の秘密鍵/公開鍵を作成している人は上書きしていいか聞かれるので no を選択してください。

消してもいい場合は yes でもいいですが、既にどこかでこの鍵を使用していると使えなくなるので注意が必要です。

何も指定しない場合は

  • id_rsa(秘密鍵 [自分用])
  • id_rsa.pub(公開鍵 [相手に渡す用])

が作成されます。

このあとの説明はファイル名を指定せずに id_rsa id_rsa.pub が作成された前提で話を進めます。

2回目と3回目の質問はパスワードを入力

2回目と3回目の質問は接続する時に入力するパスワードです。

公開鍵暗号は秘密鍵が盗まれてもパスワードが分からないと接続できないという2段構えになっているということですね。

※ 開発環境用などで毎回パスワードを入力するのが面倒な場合は省略もできます。

こんなのが表示されれば鍵の作成は成功です!

+---[RSA 4096]----+
|           o++B*B|
|            =o *+|
|           . .+ +|
|     . o *o  o=..|
|      ..o+*..*==.|
+----[SHA256]-----+

 

公開鍵の表示とコピー

下記のコードを実行すると公開鍵を表示できます。
cat ~/.ssh/id_rsa.pub

こんな感じで表示されます。初めから最後までコピをします。
ssh-rsa AAAAB3NzaC 〜省略〜 1fQQ== user_name

次のステップで貼り付けるのでそれまで、他のものをコピーしないように気をつけてください。

GCPのインスタンスにローカルの公開鍵を登録します。

GCPのインスタンス一覧から接続したいインスタンスを開きます。

そして、「編集」を押すと下の方に「SSHキーがN個あります」という表示があるのでその下の、「表示して編集する」をクリックします。

【図解】GCPにSSHで接続する方法

すると画面が開くのでそこに先ほどコピーした公開鍵を貼り付けます。

【図解】GCPにSSHで接続する方法2

テキストボックスの左にSSHでログインする時に利用する「ユーザー名」が表示されます。このユーザー名でログインしないと、SSH接続時にPermission denied (publickey) というエラーが出ます。

ユーザ名を変更したい場合は公開鍵の最後の方に鍵を作成したときのメールアドレス(<code>your_email@example.com</code>)が表示されています。このメールアドレスの@の前を変更するとSSHでログインするときのユーザー名が変わります。

ただ、このタイミングでユーザー名を変更するのは邪道な気がするので鍵を作成する段階で

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

"your_email@example.com"を変更した方がいいです。

 

ユーザ名を確認できたら画面を下までスクロールして「保存」します。

ローカルPCからGCPインスタンスに秘密鍵を使って接続します。

最後にローカルからインスタンスに接続ができれば完了ですね!

ローカルのPCのターミナルを開いて

ssh user_name@インスタンス外部IPアドレス -i 秘密鍵のパス

を入力すればOKです。インスタンスの外部IPアドレスはインスタンス一覧から確認できます。

入力例はこんな感じです。

ssh user_name@35.221.121.130 -i ~/.ssh/id_rsa

  • user_nameを先程のユーザー名と置き換える
  • 35.221.121.130をサーバーの外部IPアドレスに置き換える
  • 秘密鍵のファイル名が違う場合はid_rsaを自分の秘密鍵のファイル名に変更する

これで無事にGCPのインスタンスにSSH接続ができましたね^^

おまけ

接続する時に毎回上記の情報を引っ張ってきて入力するのは面倒なのでconfigファイルに設定内容を保存します。

下記のコマンドを実行してconfigファイルを編集します。

vim ~/.ssh/config

入力する内容は下記の通りです。

Host 任意の接続名
HostName ホスト名(ドメイン or IP)
User ユーザー名
Port ポート番号
IdentityFile 鍵へのPATH(例えば~/.ssh/hoge.key)

先程接続に使った情報を元にした入力例だとこの様になります。

config

StrictHostKeyChecking no

Host __server_name
HostName 35.221.121.130
User user_name
Port 22
IdentityFile ~/.ssh/id_rsa

1行目は初回SSH接続時に確認されないようにするための設定です。

Hostを__server_nameと書きましたがここは好みで変更してください。

__ を前につけることで ssh __ tab を押すとconfig に登録されているホストの一覧を確認できるので便利です。

さて、SSHで接続してみましょう。入力する内容は

ssh Host だけで接続できます。Hostは__server_name と設定したので

ssh __server_name

たったこれだけで次からサーバーに接続できるようになりました!便利ですね(^^)♪

6 Comments

かつろぐ

こんにちは
ssh-keygenで秘密鍵/公開鍵の作成の際に
ビット数をデフォルトから4096に変更するのは何か理由があるのでしょうか?

返信する

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください