はじめに
Computeにログインする鍵をどこに保存したかわからなくなることが、まれによくあると思います。
そんなときに、シリアルコンソールを利用して、パスワードなしでログインして鍵を追加する方法です。
※OEL7(GRUB2)では、RHEL6(GRUB)の時のようにシングルユーザモードで起動しただけではパスワードなしでログインすることができないようです。
※ 以前、コンソールログインを試した時の記憶で、パスワード認証ユーザを先に作っとかないとだめと思いこんでいました。5/15まで無償公開されている Oracle Universityの講座 (Oracle Cloud Infrastructure Architect Professional Workshop) を見て、パスワード認証をバイパスする方法が紹介されていたので、お!と思いやってみました。が、公式ドキュメントにちゃんとやり方書いてあるのですね。。
手順
※OEL7.xを前提とした方法です。
cloud shellを起動
ここでは、シリアルコンソールにSSHアクセスするための環境として、Cloud Shellを利用します。
cloud shellからコンソールアクセス用の鍵ペアを生成します。
$ ssh-keygen -t rsa
$ cat .ssh/id_rsa.pub
→ 出力された公開鍵をコピーします。
※Cloud Shellのコピーは、コピー範囲を選択後にCtrl+Insert
コンソール接続の作成
ログインできなくなったComputeインスタンスの管理画面まで遷移します。
「コンソール接続の作成」ボタンを押します
先ほど、Cloud Shell上で作成した公開鍵をペーストして、「コンソール接続の作成」を押下します
作成が完了したら、コンソール接続の右側のメニューを押して、「SSHを使用して接続」を選択
コンソールに接続
Cloud Shellに戻って、コピーした接続用コマンドの文字列をペーストとします。
※Cloud Shellのペーストは、Shift+Insert
ログインすると、こんな感じにプロンプトが表示されてます。
※何も表示されない場合は、1回Enterキーを押下すると表示されます。
このままだと、パスワード認証できるユーザがいない場合はログインできないので、一度リブートします。(リブートは、コンソールメニューの「再起動」ボタンから実施)
リブート後、以下の画面で十字キーを押して画面を止めて、キーボードのeを押して編集画面に遷移します。
※cloud shellの画面を最大化しておいたほうが編集しやすいです。
linuxefiから始まる行の行末に、init=/bin/bashを追記して、Ctrl+Xキーを押下してブートします。
ブート後、ログインプロンプトではなくbashが起動してきたら成功!
SELInuxが有効な環境では、コンテクストを維持するためポリシーをロードする
# /usr/sbin/load_policy -i
リマウント
このままだと、/ファイルシステムがread onlyでマウントされているので、rwでリマウントします。
# mount -o remount,rw /
ファイルの修正
$HOME/.ssh/authorized_keysに公開鍵を追記します。
systemdを起動する
systemdを起動せずに、exitした場合、私の環境ではカーネルパニックが発生してしばらく操作できなくなりましたのでご注意ください
# exec /usr/lib/systemd/systemd
systemdの起動後、一応もう一回再起動しておく
シリアルコンソールを抜ける
※シリアルコンソールに接続中にセッションが切れると、セッションが残ってしばらくログインできなくなるので、ちゃんと抜けておきましょう
以下のキーをすばやく実行すると抜けれます
~.
コンソール接続を消す
使い終わったら、コンソール接続は消しておきましょう