GCPで作成したGCEにSSHで接続する方法を記載します。
SSHで接続する対象のGCEはGCEとは ~GCP無料枠を利用して学習~で作成したものになります。
※ディスクイメージにCentOS 7を使用しているため、別途必要な作業が発生します。
また、SSHはデフォルトでTCP22番ポートが利用されますが、これが攻撃の対象となってしまいますので、利用するポート番号の変更も併せて実施します。
Cloud Shell
Cloud ShellとはGoogleが提供するGCP専用のWebコンソールの中で利用できるツールのことです。
ブラウザ上のコマンド端末からGCPのプロジェクトやリソースの管理や操作が可能です。
コンソール画面からCloud Shellを開きます。
コンソール画面の右上のアイコンをクリックすると、画面下部にターミナルが表示されます。
コンソール画面から「Copmpute Engine」>「VMインスタンス」をクリックします。
接続したいGCEの「SSH」の横にある「▼」をクリックし、「gcloudコマンドを表示」をクリックします。
表示されたgloudコマンドを先程のCloud Shellで実行します。
または「gcloudコマンドを表示」をクリックした後の画面より「CLOUD SHELLで実行する」をクリックすると接続できます。
なお、後述するSSHのポート設定の変更を実施した場合は、gloudコマンドに以下オプションを追加します。
--ssh-flag="-p ポート番号"
ブラウザウィンドウ
ウェブブラウザの拡張機能や追加のソフトウェアをインストールなしで利用できます。
コンソール画面から「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=ポート番号"
以上で、作業完了です。