lisz-works

プログラミングと興味を貴方に

GCPのVMインスタンスがSSH接続できない!解決までの手順!

【スポンサーリンク】

Google Cloud Platform

こんにちわlisです!

GCP*1のGCE*2でVMインスタンスを作ったのですが……

ネットで手順通りにやったつもりが、自分のPCからSSH接続できない!

という自体に陥りました。

今回はSSH接続に至ったのでその手順です!

状況

GCEでVMインスタンスを作って、なんやかんや設定したつもりでした。

立ち上げ自体は過去にやっていたのもあり、この辺を参考にしながら流し読みして設定していたのが良くなかったんだと思います。

SSH接続を試してみると……

ssh: connect to host XXX.XXX.XXX.XXX port 22222: Connection refused

SSH鍵を設定したりファイアウォール設定したりなんやかんややったのに……

と途方にくれていました。

原因

ファイアウォールを設定したけど、その前にSSHで待ち受けるポート番号の変更をしていなかった

これにつきます。

ぼくはSSH関連のファイアウォールの設定に

  1. disallow-22 → ポート:22を拒否する設定を作成
  2. default-allow-ssh → ポート:22222を許可する設定を作成

というものを作っていました。

ポート22を塞いで不正アクセスを防止して、ポート22222で自分が接続しよう。という魂胆ですね。

しかし事前にSSHで待ち受けるポート番号を変更していなかったため、ポート22を塞がれたのでそもそもSSHでのアクセス自体ができない = SSHで接続できない!となっていました。

更に、Cloud Shellを開くとインスタンスに接続できていると勘違いしていたことが大きな要因でした。

ということでこれを解決していきます。

解決するための流れ概要

  1. ファイアウォールで一旦ポート:22を有効化
  2. GCE内機能でSSH接続→ユーザのパスワード設定
  3. GCE内機能でシリアルコンソール接続
  4. シリアルコンソールでログインを確認
  5. ファイアウォールを元に戻す
  6. シリアルコンソールでSSHの設定
  7. ローカルから変更されたポートでSSH接続!

一旦ポート:22を開放してSSHする

「ファイアウォール ルールの設定」を開いて、ファイアウォールの設定を一旦変更します。

ポート:22の拒否設定を停止

ぼくの場合、「disallow-22としてポート:22を拒否」していました。

なのでこれを一旦無効化します。

ポート22を拒否する設定「disallow-22」を開きます。

ポート22拒否設定を選択

「編集」を選択。

編集を押す

「ルールを無効にする」を開きます。

ルールを無効にするを開く

「無効」をチェックして「保存ボタン」で保存すればOK!

無効

ポート:22を有効化

ポート22を有効化するために、「default-allow-ssh」に22を追加します。

「default-allow-ssh」を開きます。

SSH接続設定

編集を選択。

編集

現在設定しているポートの後ろに「, 22」を追加します。

「,」区切りで複数のポートを指定することができます。

ポート22を追加

追加したら「保存ボタン」で保存。

シリアルポート接続

インスタンスの詳細→編集→シリアルポート接続を有効化。

インスタンスの詳細を開く

編集

「シリアルポート接続を有効化」にチェックを入れて、最下部の「保存ボタン」を押します。

シリアルポート接続を有効化

設定が保存されると、「シリアルコンソールに接続ボタン」が有効化されています!

シリアルコンソールに接続が有効化されてる!

SSH接続

SSHボタンでSSH接続ウィンドウを表示させます。
このSSH接続は、ポート:22で接続されます。

SSHボタンからSSH接続

22が開放されていればコンソールが開く。

パスワード変更

SSH接続したコンソールで操作していきます。

$ whoami

でユーザ名を調べます。実行して表示されたものがユーザ名です。

このユーザのパスワードを設定します。

$ sudo passwd `whoami`

を実行して新しいパスワードを入力(2回)。

これでexitで閉じてOK。

シリアルコンソールで接続(ログイン)を確認

「シリアルコンソールに接続ボタン」を押す。

シリアルコンソールに接続ボタン

シリアルコンソール接続でのコンソールが開かれるので、先程調べた&設定したユーザ名とパスワードを入力してログイン。

できたら成功!

SSH接続のポート変更

$ sudo vi /etc/ssh/sshd_config

頭の方にあるPortの値を任意のものに変更する。

22222に変更する例。

#Port 22
Port 22222

sshdの再起動

$ sudo systemctl restart sshd
Apr 28 01:56:20 instance-1 systemd[1]: Stopping OpenBSD Secure Shell server...
Apr 28 01:56:20 instance-1 systemd[1]: Stopped OpenBSD Secure Shell server.
Apr 28 01:56:20 instance-1 systemd[1]: Starting OpenBSD Secure Shell server...

status確認してみましょう。

Server listening~のところのポート番号が変わっていますね!

$ sudo systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enab
   Active: active (running) since Wed 2021-04-28 01:56:20 UTC; 27s ago
  Process: 2373 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 2381 (sshd)
    Tasks: 1 (limit: 639)
   CGroup: /system.slice/ssh.service
           └─2381 /usr/sbin/sshd -D
Apr 28 01:56:20 instance-1 systemd[1]: Starting OpenBSD Secure Shell server...
Apr 28 01:56:20 instance-1 sshd[2381]: Server listening on 0.0.0.0 port 22222.
Apr 28 01:56:20 instance-1 sshd[2381]: Server listening on :: port 22222.
Apr 28 01:56:20 instance-1 systemd[1]: Started OpenBSD Secure Shell server.

これでポート番号を22222に指定してSSH接続すれば繋がります!

やった!

ファイアウォールを元に戻す

「一旦ポート:22を開放してSSHする」でやったことと逆のことをして設定を元に戻します。

  • 「disallow-22」は、「無効→有効」にして保存
  • 「default-allow-ssh」は、「,22」を削除して保存

これでポート22と22222でSSH接続を試してみて

  • 22: SSH接続が失敗する
  • 22222: SSH接続に成功する

となればOK!

参考

コチラを参考にしました。ありがとうございました!

www.apps-gcp.com

qiita.com

あとがき

GCPのVMインスタンスがSSH接続できるようにするまでの手順でした!

実は全然わからず一旦手つかずにしてしまっていたのですが、ようやく解決できました……

これでGCPで色々できる……!

*1:Google Cloud Platfrom

*2:Google Compute Engine