こんにちわlisです!
GCP*1のGCE*2でVMインスタンスを作ったのですが……
ネットで手順通りにやったつもりが、自分のPCからSSH接続できない!
という自体に陥りました。
今回はSSH接続に至ったのでその手順です!
- 状況
- 原因
- 解決するための流れ概要
- 一旦ポート:22を開放してSSHする
- シリアルポート接続
- SSH接続
- パスワード変更
- シリアルコンソールで接続(ログイン)を確認
- SSH接続のポート変更
- sshdの再起動
- ファイアウォールを元に戻す
- 参考
- あとがき
状況
GCEでVMインスタンスを作って、なんやかんや設定したつもりでした。
立ち上げ自体は過去にやっていたのもあり、この辺を参考にしながら流し読みして設定していたのが良くなかったんだと思います。
SSH接続を試してみると……
ssh: connect to host XXX.XXX.XXX.XXX port 22222: Connection refused
SSH鍵を設定したりファイアウォール設定したりなんやかんややったのに……
と途方にくれていました。
原因
ファイアウォールを設定したけど、その前にSSHで待ち受けるポート番号の変更をしていなかった
これにつきます。
ぼくはSSH関連のファイアウォールの設定に
- disallow-22 → ポート:22を拒否する設定を作成
- default-allow-ssh → ポート:22222を許可する設定を作成
というものを作っていました。
ポート22を塞いで不正アクセスを防止して、ポート22222で自分が接続しよう。という魂胆ですね。
しかし事前にSSHで待ち受けるポート番号を変更していなかったため、ポート22を塞がれたのでそもそもSSHでのアクセス自体ができない = SSHで接続できない!となっていました。
更に、Cloud Shellを開くとインスタンスに接続できていると勘違いしていたことが大きな要因でした。
ということでこれを解決していきます。
解決するための流れ概要
- ファイアウォールで一旦ポート:22を有効化
- GCE内機能でSSH接続→ユーザのパスワード設定
- GCE内機能でシリアルコンソール接続
- シリアルコンソールでログインを確認
- ファイアウォールを元に戻す
- シリアルコンソールでSSHの設定
- ローカルから変更されたポートでSSH接続!
一旦ポート:22を開放してSSHする
「ファイアウォール ルールの設定」を開いて、ファイアウォールの設定を一旦変更します。
ポート:22の拒否設定を停止
ぼくの場合、「disallow-22としてポート:22を拒否」していました。
なのでこれを一旦無効化します。
ポート22を拒否する設定「disallow-22」を開きます。
「編集」を選択。
「ルールを無効にする」を開きます。
「無効」をチェックして「保存ボタン」で保存すればOK!
ポート:22を有効化
ポート22を有効化するために、「default-allow-ssh」に22を追加します。
「default-allow-ssh」を開きます。
編集を選択。
現在設定しているポートの後ろに「, 22」を追加します。
「,」区切りで複数のポートを指定することができます。
追加したら「保存ボタン」で保存。
シリアルポート接続
インスタンスの詳細→編集→シリアルポート接続を有効化。
「シリアルポート接続を有効化」にチェックを入れて、最下部の「保存ボタン」を押します。
設定が保存されると、「シリアルコンソールに接続ボタン」が有効化されています!
SSH接続
SSHボタンでSSH接続ウィンドウを表示させます。
このSSH接続は、ポート:22で接続されます。
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!
参考
コチラを参考にしました。ありがとうございました!
あとがき
GCPのVMインスタンスがSSH接続できるようにするまでの手順でした!
実は全然わからず一旦手つかずにしてしまっていたのですが、ようやく解決できました……
これでGCPで色々できる……!