Google Compute EngineのインスタンスにSSH接続する

公開日:2022/09/08 更新日:2022/09/08
Google Compute EngineのインスタンスにSSH接続するのサムネイル
Photo by Caspar Camille Rubin on Unsplash

はじめに

Google Compute Engineで作成したインスタンスに自身のPCからSSH接続したいことが多いと思います。この手順をまとめます。

前提と環境

以下が前提となります。

  • Google Compute Engineのインスタンスは作成済み
  • 自身のPCにターミナル環境があること

以下の公式ドキュメントに従った作業を行います。

cloud.google.com

システムからホストされているリポジトリにアクセスまたはホストされているリポジトリを操作するには、ご使用の環境でローカル認証を設定する必要があります。

作業の流れ

作業の流れは以下のようになります。以降では、クライアントはSSH接続元のPCなどを指します。

  • クライアント側で公開鍵と秘密鍵を作成する
  • クライアント側で作成した公開鍵をGoogle Cloud Platformの管理画面から登録する

クライアント側での作業

以下のようにssh-keygenを使用してクライアント側で公開鍵と秘密鍵の両方を作成します。 公式ドキュメントに従って以下で-CオプションでGmailアカウントを指定していますが、ここはGmailアカウントでなくてもusername@example.comのような形式であれば他の値でも問題ありません。もしくは-Cオプション自体を指定しなくても問題ありません。この-Cオプションについては後述します。

~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C "yourgmail@gmail.com"

パスフレーズは適当に設定します。

~/.ssh
$ ssh-keygen -t rsa -b 4096 -C "yourgmail@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/yourpc/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

~/.sshを見てみると、秘密鍵のid_rsaと公開鍵のid_rsa.pubの2つが作成されていることを確認できます。 もし違うファイル名を指定した場合はそのファイル名の公開鍵と秘密鍵があります。

~/.ssh
$ ls
id_rsa id_rsa.pub

catコマンドで確認すると、公開鍵id_rsa.pubの中身は以下のようになっています。

~/.ssh
$ cat id_rsa.pub
ssh-rsa AAAAAAAACCCCDDDDDDfaljetlamssdjfh487dhjw79wiusd98qwujugYgywriYWVRIYQWRKQlirkg,w;reg;ogleowvdgvbiuqceqLuSFyS08r/Glmak8YwyufYrF29CXajV+ZxcnG/OLoPstHEi1ENrP8JhbaJose0EDvL4V1AW9ITG+dgmyqtFf4okzP6xZru16sbSin9YH46KeAMVdV07DBACXnF/o0zbi4rekLeuBSqfu11SK8u7O0MFoXQLXkBKjlKv+NHddAHzzhbymyX3ieuuvDkAp1SG2oXF/mH8VQCdUNA70Ff3D+8byIdUQN8oK+j1pfz/p1Jr1d1NGR5c+frnAgjACEyaQcSe8adQmCU+aETKQmaweorjtawp0rg000q0qpwifoqw0w-- yourgmail@gmail.com

上記のssh-rsa AAA...をクリップボードにコピーします。このコピーした公開鍵の中身をGoogle Compute Engine用にGoogle Cloud Platformの管理画面から登録します。

Google Compute Engine用に公開鍵を登録する

Google Cloud Platformの管理画面にログインし、以下のように、Google Compute Engineのサイドメニューにある「メタデータ」をクリックして開いたページで「SSH認証鍵」タブを選択している状態でページ上部にある「編集」をクリックします。 edit-sshkey-for-gce.png

まだSSH認証鍵を1つも登録していなければ以下のように表示されます。ここで「項目を追加」をクリックします。 add-item.png

以下のように公開鍵を入力するためのフォームが表示されるので、ここに先ほどコピーした公開鍵(id_rsa.pubの中身)を貼り付けて、ページ下部にある「保存」をクリックします。 save-pub-key-mod.png

保存が完了すると、以下のように表示されます。 saved-ssh-key-mod.png

「ユーザ名」の部分は、公開鍵の作成時に-Cオプションで指定したGmailアカウントのyourgmailが表示されます。(上記画像のtruswareと表示されている部分) このユーザ名を後ほどSSH接続時に使用します。 もし-Cオプションを指定しなかった場合は、実行したPC上のユーザ名(ssh-keygenを実行したユーザ名)が入ります。(-Cオプションについては後述。)

以上でGoogle Compute Engine側での作業は完了です。

SSH接続する

Google Compute Engine用に公開鍵の登録が完了したら、以下のようにsshコマンドで自身のPCから接続できます。

~/.ssh
$ ssh -i id_rsa yourgmail@xxx.xxx.xxx.xxx

yourgmail部分は、-Cで指定した自身のGmailアカウントの@gmail.comを除外した部分、xxx.xxx.xxx.xxx部分はGoogle Compute Engineのインスタンスの外部IPに置き換えてください。

もしパスフレーズを設定した場合は、以下のように確認されます。

~/.ssh
$ ssh -i id_rsa yourgmail@xxx.xxx.xxx.xxx
Enter passphrase for key '/home/yourpc/.ssh/id_rsa':

ssh-keygenのCオプションについて

上記では-C "yourgmail@gmail.com"と指定しましたが、指定するのがGmailアカウントでなくてもよく、またはこのオプションは使わなくても問題ありません。

元々この-Cの後に続く文字列はただのコメントとしての扱いですが、Google Cloud Platformではこの-Cの後に続く文字列としてusername@example.comを指定し、このusernameをGoogle Compute EngineにSSH接続した時のユーザ名として使用します。 したがって、例えば適当に以下のような指定をすると、

$ ssh-keygen -t rsa -b 4096 -C "test@localhost"

以下のように testというユーザ名でSSH接続できます。

$ ssh -i id_rsa test@xxx.xxx.xxx.xxx

-Cを指定しない場合は、ssh-keygenを実行するユーザ名とPC名が勝手に指定されます。例えばMacbookproだとtrusware@truswarenoMacBook-Pro.localのよう形です。 この場合は、truswareという私が使っているPCのユーザ名がSSH接続時のユーザ名となるので、以下でSSH接続できます。

$ ssh -i id_rsa trusware@xxx.xxx.xxx.xxx

ただし、-C ''のようにして、username@example.comの形式を指定しないと、Google Cloud Platformの管理画面で公開鍵を登録する時に以下のようなエラーが表示されます。 ssh-format-error-mod.png

SSHの他の設定について

上記に記載したように毎回sshコマンドの後に接続先を続けるのは面倒なので、SSH接続用の設定ファイルを一度作成してもっと楽にSSH接続することもできます。 また、SSH接続に使うポート番号を、デフォルトの22番から他の番号を使うように変更することもできます。 これらについては以下に別途まとめているため必要な方は見てみてください。

virment.com

公開鍵認証でのssh接続の設定をよく行うのでここにまとめます。

ファイアウォールでポート番号を指定する

もしSSHの設定変更によって使用するポート番号を変更した場合は、Google Cloud Platformのファイアウォールの設定も併せて変更する必要があります。 具体的には、以下のようにメニュー内の「ネットワーク」→「ファイアウォール」をクリックします。 firewall-menu.png

ファイアウォールの設定一覧が表示されるので、この中の「default-allow-ssh」をクリックします。 select-ssh-rules.png

「編集」をクリックします。 edit-ssh-rule.png

「ポート」に変更したポート番号を入力して「保存」をクリックします。以下では、ポート番号を10022とした場合です。複数指定したい場合はカンマ区切りで22,10022のようにも指定可能です。 set-port-for-ssh.png

以上でファイアウォールの変更が完了です。

まとめ

Google Compute Engineを使うことが多く、SSH接続の機会も多いためまとめました。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。