プロジェクト

全般

プロフィール

AWS Lightsailの立ち上げとUbuntu22.04へのアップグレード。

バージョン 4 (手動人形, 2023/02/03 10:05) → バージョン 5/5 (手動人形, 2023/02/03 10:06)

## 概要

定額でAWSのインスタンスを利用できるLightsail。

Ubuntu系OSを利用できるものの、2023年2月時点ではUbuntu22.04に対応していません。

20.04は選べますので、

1. Ubuntu20.04で新たなインスタンスを立ち上げる
2. Ubuntu22.04にアップグレードする

方法を紹介します。

## どハマりしたこと

結論を言うと、Ubuntu 22.04にアップグレードするとLigtsailの管理画面から直接SSHすることはできません。
(SSH-1アルゴリズムによるRSA認証が無効化されます)

つまり、 **何も設定せず**Web画面のSSH接続で最初にアップグレードをすると、再起動した瞬間にログインできず詰みます。

これに気づかず、アップグレード後に全くログインできずインスタンスを作り直す羽目になりました。以下はメモとして残しておきます。

## 成功した手順(さっくりした手順)

以下、ある程度の知識がある方ならこの手順を行えば問題ないと思います。

1. Lightsail上でUbuntu 20.04のインスタンスを立ち上げる。
1. 静的IPを付与してIPを固定化する。
- 必要に応じてDNSレコードに登録する。
1. Lightsail管理画面から初期ユーザーでログインする。
1. 初期ユーザー以外のrootに昇格可能なユーザーを作成する。
1. そのユーザーで強力な暗号による秘密鍵/公開鍵を設定する。
1. Ubuntu 20.04 → 22.04にアップグレードする。

## 成功した手順(より詳細な記述)

### インスタンスの作成

#### AWS Lightsailの管理画面にログインします。

https://lightsail.aws.amazon.com/ls/webapp/home/instances

「インスタンスの作成」をクリックします。

#### インスタンス作成

自分は以下のように選択しました。

- リージョン:東京
- インスタンスイメージの選択:Linux (OSのみ)
- Ubuntu 20.04 LTSを選択。
- 月次料金:10USD/月
- インスタンス名:任意のもの
- そのほかは空白

→設定後、「インスタンスの作成」をクリックします。
 → 作成後、「ネットワーキング」から静的IPを付与します。
  → 必要に応じてDNSを設定し、名前解決できるようにします。

#### 管理画面のWebコンソール(SSH)操作

AWSインスタンスのWeb画面からログインし、rootに昇格します。

```bash
sudo su -
# この時、パスワードは設定されていないのでそのまま昇格できます。
```

ここから、ローカルのターミナルクライアントから接続できるようにユーザーを作成し、設定します。

ここではhogeとしていますので、任意のユーザーを指定して下さい。

```bash
adduser hoge
# パスワードなどを設定します

usermod -G sudo hoge
# ユーザーhogeを管理者グループに入れます

su - hoge
# ユーザーhogeに変われることを確認します

sudo su -
# パスワード入力後にrootに昇格できることを確認します

exit
# ユーザhogeに戻ります

ssh-keygen -t ed25519
# 鍵の格納場所は空Enter。(/home/hoge/.ssh/
# パスワードを設定します。

cd .ssh
ls -l
# 以下のファイルを確認します
# └id_ed25519
# └id_ed25519.pub
# ※これらのファイルはscp等で自分のクライアントにコピーします

mv id_ed25519.pub authorized_keys
chmod 600 authorized_keys
# 公開鍵をauthorized_keysに変更し、パーミッションを厳密にします

```

この後、ローカルにコピーしたid_ed25519をSSHターミナルクライアントに保存して設定し、接続確認を行います。

#### ローカルPC(ターミナルクライアント)からの操作

```bash ```
sudo su -
# ログイン後、設定したユーザーがrootに昇格できることを確認します

apt update && apt upgrade && apt autoremove
# パッケージを最新版にして不要パッケージを削除します。途中で不要パッケージを消すかを求められるので[y]で消去します

reboot
# 一度再起動をします
# 再起動後、ログインします

#↓ここからは管理者権限で操作をします↓

```

#### Ubuntu20.04→22.04へのアップグレード

```bash
do-release-upgrade
```

##### アップグレード中にプロンプトから質問されたこと

以下、主要な質問事項です。コメント(#の後)に概要を書いています。

```
Reading cache

Checking package manager

Continue running under SSH?

This session appears to be running under ssh. It is not recommended
to perform a upgrade over ssh currently because in case of failure it
is harder to recover.

If you continue, an additional ssh daemon will be started at port
'1022'.
Do you want to continue?

# SSHのポートを追加するか
# → y

Starting additional sshd

To make recovery in case of failure easier, an additional sshd will
be started on port '1022'. If anything goes wrong with the running
ssh you can still connect to the additional one.
If you run a firewall, you may need to temporarily open this port. As
this is potentially dangerous it's not done automatically. You can
open the port with e.g.:
'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT'

To continue please press [ENTER]

# 設定を変更するか
# → Enter

Do you want to start the upgrade?

4 packages are going to be removed. 85 new packages are going to be
installed. 555 packages are going to be upgraded.

You have to download a total of 247 M. This download will take about
49 seconds with a 40Mbit connection and about 6 minutes with a 5Mbit
connection.

Fetching and installing the upgrade can take several hours. Once the
download has finished, the process cannot be canceled.

Continue [yN] Details [d]

# アップグレード前の最終確認
# → y

There are services installed on your system which need to be restarted when certain libraries, such as libpam, libc, and libssl, are upgraded. Since these restarts may cause interruptions of service for the system, you will x
x normally be prompted on each upgrade for the list of services you wish to restart. You can choose this option to avoid being prompted; instead, all necessary restarts will be done for you automatically so you can avoid being x
x asked questions on each library upgrade. x
x x
x Restart services during package upgrades without asking?

# アップグレード時、各種サービスを再起動前にプロンプトでy/nを確認するか
# → 質問されるのがめんどいので yes

# この間、SSH等の設定変更を行うか訊いてきます。プロンプトの選択を変えずに先に進みました
# keep the local version currently installed

Remove obsolete packages?

# 不要パッケージの削除
# → Yes

System upgrade is complete.

Restart required

To finish the upgrade, a restart is required.
If you select 'y' the system will be restarted.

Continue [yN]

# アップグレード完了後にリブートするか
# → y

```

こうして、再起動後、無事にアップグレードが完了です。

```bash
cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
```

#### アップグレード後の操作

以下、速やかに行います。

管理者に昇格できることを確認します。

```bash
sudo su -
```

rootのパスワードを設定します。

```bash
passwd root
```

初期ユーザー(ubuntu)が物理的にログインできないようにします。

```
cd /home/ubuntu/.ssh

rm authorized_keys
```

以上で、Ubuntu22.04へのアップグレードは完了です。
クリップボードから画像を追加 (サイズの上限: 50 MB)