1. はじめに
通常クラウドサービスのVMインスタンスへの接続はWebUI若しくはSSHクライアントからSSHによる接続を実施した上で操作していると思います。
ある日VMインスタンスを再起動したところ、SSHサービスが正常に起動しない状態に陥り、サーバにログイン出来なくなってしまいました。復旧に向けて対応した内容を纏めます。
2. GCPコンソール上での操作
2-1. ログの確認
- GCPログイン後の左上のハンバーガーメニューボタン「≡」から、「Compute Engine」、「VMインスタンス」を開きます。
- 今回SSHサービスが正常に起動しない状態に陥ったVMインスタンス名をクリックします。
- VMインスタンスの詳細画面が表示されますので、「シリアルポート1(コンソール)」をクリックします。
しばらくすると、コンソール経由で現在VMインスタンスに出力されているログ情報を確認することができます。ログ情報を確認したところ、今回はVMインスタンス自体が起動できていないのではなく、sshdサービスが起動できていない事が確認できました。
google_accounts_daemon: Adding user ma967gachapin to group google-sudoers systemd: sshd.service holdoff time over, scheduling restart. systemd: Starting Google Compute Engine Instance Setup... instance-setup: INFO Running set_multiqueue. instance-setup: INFO Setting /proc/irq/29/smp_affinity_list to 0 for device virtio1. instance-setup: INFO /proc/irq/29/smp_affinity_list: real affinity 0 instance-setup: INFO Setting /proc/irq/30/smp_affinity_list to 0 for device virtio1. instance-setup: INFO /proc/irq/30/smp_affinity_list: real affinity 0 instance-setup: INFO Queue 0 XPS=1 for /sys/class/net/eth0/queues/tx-0/xps_cpus systemd: Started Google Compute Engine Instance Setup. systemd: Starting OpenSSH server daemon... systemd: sshd.service: main process exited, code=exited, status=255/n/asystemd: Failed to start OpenSSH server daemon. systemd: Unit sshd.service entered failed state. systemd: sshd.service failed.
2-2. シリアルポート経由でのリモートアクセス
- VMインスタンスの詳細画面に戻り、「編集」ボタンをクリックします。
- 表示される画面項目の中に「シリアルポート接続を有効化」という項目がありますので、チェックボックスにチェックを入れて有効にします。
- 画面最下部にある「保存」ボタンを押し、設定を保存します。
- 改めてVMインスタンス名をクリックし、VMインスタンスの詳細画面を開きます。
- 「シリアルコンソールに接続」というボタンが出現している為、クリックします。
- 別ウィンドウが開き、ユーザ名とパスワードが求められますので、入力するとVMインスタンスへログイン出来ます。
復旧処理(SSHサービスの起動)
3-1. SE Linuxの設定変更
先程のコンソール出力されていたログの中に以下の行があります。
これはsshdの起動をSELinuxが許可しておらずsshdを起動できなかった為に出力されていました。
systemd: Unit sshd.service entered failed state.
復旧の為、先ずは一時的にSELinuxを無効にします。
$ sudo set enforce 0 $ sudo systemctl start sshd.service
サーバを再起動した際にもSELinuxを無効にするには以下の様に、設定ファイルのSELINUX項目を編集します。
$ sudo vi /mnt/etc/selinux/config
SELINUX=disabled
3-2. SSHサービスの起動
SELinuxの設定が完了したら、sshdサービスを起動します。
$ sudo set enforce 0 $ sudo systemctl start sshd.service
上記でsshdサービスの復旧ができました。ただクラウドサービスのVMインスタンスユーザの初期設定ではユーザパスワードが設定されていません。ユーザパスワードが設定されていない場合はパスワードによるログインが実施できない為、少なくとも1ユーザはパスワードを設定した一般ユーザを準備しておくと良いでしょう。