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

はじめに
Google Compute Engineで作成したインスタンスに自身のPCからSSH接続したいことが多いと思います。この手順をまとめます。
前提と環境
以下が前提となります。
- Google Compute Engineのインスタンスは作成済み
- 自身のPCにターミナル環境があること
以下の公式ドキュメントに従った作業を行います。
システムからホストされているリポジトリにアクセスまたはホストされているリポジトリを操作するには、ご使用の環境でローカル認証を設定する必要があります。
作業の流れ
作業の流れは以下のようになります。以降では、クライアントはSSH接続元のPCなどを指します。
- クライアント側で公開鍵と秘密鍵を作成する
- クライアント側で作成した公開鍵をGoogle Cloud Platformの管理画面から登録する
クライアント側での作業
以下のようにssh-keygenを使用してクライアント側で公開鍵と秘密鍵の両方を作成します。
公式ドキュメントに従って以下で-CオプションでGmailアカウントを指定していますが、ここはGmailアカウントでなくてもusername@example.comのような形式であれば他の値でも問題ありません。もしくは-Cオプション自体を指定しなくても問題ありません。この-Cオプションについては後述します。
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C "yourgmail@gmail.com"
パスフレーズは適当に設定します。
$ 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つが作成されていることを確認できます。
もし違うファイル名を指定した場合はそのファイル名の公開鍵と秘密鍵があります。
$ ls
id_rsa id_rsa.pub
catコマンドで確認すると、公開鍵id_rsa.pubの中身は以下のようになっています。
$ 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認証鍵」タブを選択している状態でページ上部にある「編集」をクリックします。
まだSSH認証鍵を1つも登録していなければ以下のように表示されます。ここで「項目を追加」をクリックします。
以下のように公開鍵を入力するためのフォームが表示されるので、ここに先ほどコピーした公開鍵(id_rsa.pubの中身)を貼り付けて、ページ下部にある「保存」をクリックします。
「ユーザ名」の部分は、公開鍵の作成時に-Cオプションで指定したGmailアカウントのyourgmailが表示されます。(上記画像のtruswareと表示されている部分)
このユーザ名を後ほどSSH接続時に使用します。
もし-Cオプションを指定しなかった場合は、実行したPC上のユーザ名(ssh-keygenを実行したユーザ名)が入ります。(-Cオプションについては後述。)
以上でGoogle Compute Engine側での作業は完了です。
SSH接続する
Google Compute Engine用に公開鍵の登録が完了したら、以下のようにsshコマンドで自身のPCから接続できます。
$ ssh -i id_rsa yourgmail@xxx.xxx.xxx.xxx
yourgmail部分は、-Cで指定した自身のGmailアカウントの@gmail.comを除外した部分、xxx.xxx.xxx.xxx部分はGoogle Compute Engineのインスタンスの外部IPに置き換えてください。
もしパスフレーズを設定した場合は、以下のように確認されます。
$ 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の他の設定について
上記に記載したように毎回sshコマンドの後に接続先を続けるのは面倒なので、SSH接続用の設定ファイルを一度作成してもっと楽にSSH接続することもできます。
また、SSH接続に使うポート番号を、デフォルトの22番から他の番号を使うように変更することもできます。
これらについては以下に別途まとめているため必要な方は見てみてください。
ファイアウォールでポート番号を指定する
もしSSHの設定変更によって使用するポート番号を変更した場合は、Google Cloud Platformのファイアウォールの設定も併せて変更する必要があります。
具体的には、以下のようにメニュー内の「ネットワーク」→「ファイアウォール」をクリックします。
ファイアウォールの設定一覧が表示されるので、この中の「default-allow-ssh」をクリックします。
「ポート」に変更したポート番号を入力して「保存」をクリックします。以下では、ポート番号を10022とした場合です。複数指定したい場合はカンマ区切りで22,10022のようにも指定可能です。
以上でファイアウォールの変更が完了です。
まとめ
Google Compute Engineを使うことが多く、SSH接続の機会も多いためまとめました。
関連記事
公開日:2022/09/11 更新日:2022/09/11Google Compute EngineのインスタンスにSSH接続できなくなった時の対処方法
Google Compute EngineのインスタンスにSSH接続できていたのにSSHの設定ミスや原因不明でSSH接続できなくなった時の対処方法をメモします。自分のPCからだけでなく、Google Cloud Platform上での管理画面からもSSHできない場合にも有効です。
公開日:2022/09/09 更新日:2022/09/09Meilisearchを認証ユーザのみ使用できるようAPIキーを設定する
認証ユーザにのみMeilisearchの使用を許可して保護するためには、Meilisearchのマスターキーの設定とAPIキーの作成が必要になります。この手順をまとめます。
公開日:2022/09/09 更新日:2022/09/09MeilisearchをGoogle Compute Engineにデプロイして独自ドメインを設定する
Firebaseで全文検索を実装するために調査していたところ、Meilisearchというオープンソースを見つけました。調べてみるとMeilisearchが良さそうだったため、Google Compute Engine上にデプロイし、独自ドメインを設定して動作確認してみました。その手順をメモします。
公開日:2018/02/10 更新日:2018/02/10CentOSでrootのときだけ日本語が文字化けする時の原因と対処方法
さくらVPSでCentOSを使いはじめたところ、一般ユーザで使用している時はvimなどのエディタで編集していても日本語が問題なく表示されていましたが、root権限で同様に編集のためにファイルを開いたら日本語が文字化けしてしまいました。以降ではこの原因と対処方法についてメモします。

