GCEにSSHで接続する


GCPで作成したGCEにSSHで接続する方法を記載します。

SSHで接続する対象のGCEはGCEとは ~GCP無料枠を利用して学習~で作成したものになります。
※ディスクイメージにCentOS 7を使用しているため、別途必要な作業が発生します。

また、SSHはデフォルトでTCP22番ポートが利用されますが、これが攻撃の対象となってしまいますので、利用するポート番号の変更も併せて実施します。

Cloud Shell

Cloud ShellとはGoogleが提供するGCP専用のWebコンソールの中で利用できるツールのことです。
ブラウザ上のコマンド端末からGCPのプロジェクトやリソースの管理や操作が可能です。

Cloud Shellの起動

コンソール画面からCloud Shellを開きます。
コンソール画面の右上のアイコンをクリックすると、画面下部にターミナルが表示されます。

コンソール画面から「Copmpute Engine」>「VMインスタンス」をクリックします。
接続したいGCEの「SSH」の横にある「▼」をクリックし、「gcloudコマンドを表示」をクリックします。

表示されたgloudコマンドを先程のCloud Shellで実行します。
または「gcloudコマンドを表示」をクリックした後の画面より「CLOUD SHELLで実行する」をクリックすると接続できます。

なお、後述するSSHのポート設定の変更を実施した場合は、gloudコマンドに以下オプションを追加します。

--ssh-flag="-p ポート番号"

ブラウザウィンドウ

ウェブブラウザの拡張機能や追加のソフトウェアをインストールなしで利用できます。

ブラウザからのSSH

コンソール画面から「Copmpute Engine」>「VMインスタンス」をクリックします。
接続したいGCEの「SSH」横にある「▼」をクリックし、「ブラウザウィンドウで開く」をクリックします。

SSHのポート設定を変更した場合は「ブラウザウィンドウでカスタムポートを開く」をクリックし、設定したポートを入力して「開く」をクリックします。

ローカル環境からSSH

ローカルのPCからターミナルを使用して接続します。
SSH接続の設定を実行するにあたって、以下を条件としています。

 ・SSHのポートをデフォルト以外に設定
 ・公開鍵/秘密鍵による認証

実際の設定作業は以下の通りになります。

 1.公開鍵をGCEにアップロード
 2.変更予定のSSHポートに対するファイアウォールの通信許可設定追加
 ※firewalldとSELINUXを無効化(CentOS利用時)
 3.GCEのSSHポート設定変更

1.公開鍵をGCEにアップロード

SSH接続を実現するための秘密鍵/公開鍵を作成します。
下記コマンドを実行して作成される"id_rsa"が秘密鍵、"id_rsa.pub"が公開鍵の鍵ファイルです。

$ mkdir ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "ユーザー名"
$ ls ~/.ssh/
config  id_rsa  id_rsa.pub  known_hosts

GCPのコンソール画面から「Copmpute Engine」>「メタデータ」をクリックします。
「SSH認証鍵」をクリックすると現在GCPに登録されている認証鍵の一覧が表示されます。
「+項目を追加」をクリックし、先程作成した公開鍵の内容をテキストボックスにコピーして「保存」をクリックします。

上述のCloud ShellまたはブラウザウィンドウからGCEに接続し、ユーザーディレクトリ配下に"authorized_keys"の鍵ファイルが作成されていることを確認します。
また、ユーザーディレクトリと各鍵ファイルの権限がそれぞれ700、600であることも確認します。
想定と異なった権限であれば変更します。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/鍵ファイル

ローカルのターミナルからSSHで接続します。

ssh ユーザー名@インスタンス外部IPアドレス -i 秘密鍵のパス

2.変更予定のSSHポートに対するファイアウォールの通信許可設定追加

GCPのコンソール画面から「VPCネットワーク」>「ファイアウォールルール」をクリックします、「ファイアウォールルールを作成」をクリックします。

必要事項を入力していき、「ターゲットタグ」を入力します。
ここで設定したターゲットタグをGCEに設定することで、ファイアウォールルールが適用されます。
「プロトコルとポート」で変更するポート番号を入力します。
1~1024のウェルノウンポート以外を入力してください。
また、予測されやすい2222などは避けたほうが良いようです。
「作成」をクリックして新しくファイアウォールルールが作成されたこと確認します。

コンソール画面から「Copmpute Engine」>「VMインスタンス」をクリックします。
SSH接続する対象のGCEをクリックし、「編集」をクリックします。
「ネットワークタグ」に先程のファイアウォールルール作成時に指定したタグを追加します。
「保存」をクリックします。

※firewalldとSELINUXを無効化

今回、SSH接続の設定を行うGCEはCentOS7を使用しています。
そのため、firewalldとSELINUXを無効化する必要があります。
この設定を行わないとポート変更後にsshdの起動に失敗します。

$ systemctl restart sshd.service

Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service"
 and "journalctl -xe" for details.

firewalld無効化

#firewalldの無効化
$ systemctl disable firewalld

#firewalldの状態確認
$ systemcctl status firewalld
● firewalld.service - firewalld - dynami firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled★; vendor preset: enabled)

SELINUX無効化

#SELINUXの状態確認(有効)
$ getenforce
Enforcing

#SELINUXの設定ファイルを編集
$ sudo vi /etc/selinux/config

SELINUX=disabled

#GCEを再起動(コンソール画面の■(停止)、▶(開始)ボタンでも可)
$ shutdown -r now

#SELINUXの状態確認(無効)
$ getenforce
Disabled

3.GCEのSSHポート設定変更

上述のCloud ShellまたはブラウザウィンドウからGCEに接続します。
viで設定ファイルを編集し、ポート番号を任意の番号に設定します。

#SSHの設定ファイルを編集
$ vi /etc/ssh/sshd_config

Port ポート番号

#sshdの再起動
$ systemctl restart sshd.service
$ systemctl status sshd.service

ローカルのターミナルからオプションで変更したポート番号を指定し、SSHで接続します。

ssh ユーザー名@インスタンス外部IPアドレス -i 秘密鍵のパス --ssh-flag="p=ポート番号"

以上で、作業完了です。