GCPでシリアルコンソール接続用に後からユーザを追加する方法

GCPでシリアルコンソール接続用に後からユーザを追加する方法

概要

OSSを期待のバージョンにUPをしたく試行錯誤しているなかで、
レポジトリをstretch(Debian9)->buster(Debian10)に変えてアップデートしたところsshdが立ち上がらなくなりssh接続ができなくなりました。
そこでシリアルコンソールから接続しようとしたのですがID/パスワードでログインできるユーザを追加しておらず、シリアルコンソール接続もできない状態になっていました。
以下のように、起動スクリプトを設定することで起動時に追加する方法も試したのですが起動スクリプトがうまく動いていない(?)のかうまくいかなかったため他の方法を試行錯誤してなんとかシリアルコンソール接続までできるようになったため方法を紹介します

具体的な方法

事前準備

この方法は一度VMインスタンスを削除するため事前にVMインスタンスの情報をバックアップしてください

スクリーンショットを取るか、VMインスタンス→対象のVMを選択→詳細タブの一番下に「同等のREST」をクリックすると各情報がJSONの情報で取得できますのでそれを保存しておくのが良さそうです。

手順

1. 一度対象のVMを削除(--keep-diskの設定で問題ないと思うがVMインスタンスの設定を確認しておいたほうがいいかも)

以下のボタンからgcloudコンソールを開いてコマンドを実行する

gcloud compute instances delete <元のインスタンス名> --zone=<ゾーン名> --keep-disks=all

2. debag用のインスタンスを作成

gcloud compute instances create <デバッグ用インスタンス名> --zone=<ゾーン名>

3. もとのブートディスクをデバッグ用インスタンスにアタッチ

gcloud compute instances attach-disk <デバッグ用インスタンス名> --disk <元のブートディスク> --device-name=<ディスク名> --zone=<ゾーン名>

4. デバッグ用インスタンスにログイン

gcloud compute ssh <デバッグ用インスタンス名> --zone=<ゾーン名> 

5. アタッチしたもとのディスクのpart1が対象

$ ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root  9 Nov 12 14:24 google-persistent-disk-0 -> ../../sda
lrwxrwxrwx 1 root root 10 Nov 12 14:24 google-persistent-disk-0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 11 Nov 12 14:24 google-persistent-disk-0-part14 -> ../../sda14
lrwxrwxrwx 1 root root 11 Nov 12 14:24 google-persistent-disk-0-part15 -> ../../sda15
lrwxrwxrwx 1 root root  9 Nov 12 14:24 old-instance-disk -> ../../sdb
lrwxrwxrwx 1 root root 10 Nov 12 14:24 old-instance-disk-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9 Nov 12 14:24 scsi-0Google_PersistentDisk_persistent-disk-0 -> ../../sda
lrwxrwxrwx 1 root root 10 Nov 12 14:24 scsi-0Google_PersistentDisk_persistent-disk-0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 11 Nov 12 14:24 scsi-0Google_PersistentDisk_persistent-disk-0-part14 -> ../../sda14
lrwxrwxrwx 1 root root 11 Nov 12 14:24 scsi-0Google_PersistentDisk_persistent-disk-0-part15 -> ../../sda15
lrwxrwxrwx 1 root root  9 Nov 12 14:24 scsi-0Google_PersistentDisk_wordpress-blog-disk -> ../../sdb
lrwxrwxrwx 1 root root 10 Nov 12 14:24 scsi-0Google_PersistentDisk_wordpress-blog-disk-part1 -> ../../sdb1

6. アタッチ

$ sudo mount /dev/sdb1 /mydisk/

→/mydisk配下がもとのディスクのルートディレクトリとなる

7. パスワードハッシュの変換

私の環境では元のインスタンスがdebian10なのに対してデバッグ用のインスタンスはdebian11となっておりパスワードハッシュの方式が変更になっていました。そのような場合、/etc/pam.d/common-password を以下の様に変更してください:

password [success=1 default=ignore] pam_unix.so obscure yescrypt

yescrypt を sha512 に変更してください。

8. ユーザ作成

# sudo adduser debuguser
# sudo echo debuguser:debugpassword | chpasswd
# sudo usermod -aG google-sudoers debuguser

9. ⑧で作成したユーザの設定を参考に/mydisk/etc/passwd,group,shadowにdebuguserの情報を追加する

/etc/passwd
debuguser:x:1003:1006:debuguser,,,:/home/debuguser:/bin/bash
/etc/group
google-sudoers:x:1000:debuguser
/etc/shadow
debuguser:XXXXXXXXXXXXXXXXXXXX:19308:0:99999:7:::

※XXXXXXXXXXXXXXXXXXXXはパスワードのハッシュ

10. sshd_config修正

私の環境ではCiphersの設定が古いことで、sshdが起動できない状況でした。sshd_configのCiphersをコメントアウトしてデフォルト設定で立ち上がるようにしました

/etc/ssh/sshd_config

Ciphers aes128-ctr,aes192-ctr,aes256-ctr
 →#Ciphers aes128-ctr,aes192-ctr,aes256-ctr

11. デバッグ用インスタンスは削除

gcloud compute instances delete <デバッグ用インスタンス名> --keep-disks all --zone=<ゾーン名>

12. ディスクを再度ブートディスクとしてアタッチしたVMインスタンスを作成する

事前準備で保存していた情報を参考に再度VMを作成する

最後に

ちなみにこの方法でSSHDは起動できるようになりましたが、結局SSH接続できない状態が続いております。。。
とりあえずシリアルコンソールで接続できるため直近はこれで乗り切りたいと思います。。。

コメント

タイトルとURLをコピーしました