6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[OCI] "困った!インスタンスにSSH接続できなくなってしまった" の復旧をやってみた

Posted at

コンピュート(仮想マシン)・インスタンスのSSHキーペアを新しいものに置き換えようとして、いろいろとやっているうちに何かの手違いでインスタンスにSSH接続できなくなってしまった。これはたいへん(汗) コンピュートの環境再構築は時間も手間もかかるので、地道に復旧の道を選択することにします。

いろいろと調べているうちに巻末のトラブルシュートのチュートリアルにたどり着いたので、シリアル・コンソールを使って復旧できるか試してみました。

実行環境

ローカル環境

  • Windows10 ラップトップPC で Windows Power Shell コンソールから SSH接続していたが、接続できなくなってしまった。

クラウド環境

  • 接続先はOracle Cloud(OCI)のパブリック・サブネットのコンピュート(仮想サーバ)
    image-20210621102454671.png

復旧の手順

巻末のドキュメントによると、SSH接続できなくなった場合の復旧手順はおおまかに以下のとおり。他のユースケースや条件については参照URLをご覧ください。

  1. ローカル環境の準備

  2. OCI インスタンスのシリアル・コンソール接続の作成

  3. シリアル・コンソールを使いローカルからインスタンスに接続

  4. SSH公開鍵の再作成

  5. 復旧確認

ローカル環境の準備

ローカル環境が Windows OSの場合は追加で PuTTY(plink.exe) または OpenSSH をインストールする必要があります。ドキュメントに従い、Windows に Git for Windows をインストールし、そこに含まれる Git Bash シェルとOpenSSHを利用します。

1. Git for Windows のインストール

ここから↓ Git for Windows をインストール

すべてデフォルト値で進めて、"Use OpenSSH" が選択されていることを確認
image-20210621104659231.png
インストール後、Windows スタートメニューに登録されたので、こちらから Git Bash を起動
image-20210621105002813.png
Git Bash が起動され、ssh コマンドを入力するとヘルプが表示され有効であることが確認できました。
image-20210621105524227.png

2. 秘密鍵の配置

SSH接続ではローカル環境に秘密鍵が必要なので、ローカルのWindows 10に秘密鍵を配備します。鍵のペアは既に取得していることを前提としています。
image-20210622111618881.png
鍵ペアの作成、およびSSH接続の概要については以下もご参考にしてみてください。
[OCI] 踏み台サーバーからSSHでプライベート・サブネットのインスタンスへの接続と、NATゲートウェイを試してみる

以上でローカル環境での準備は完了です。

OCI インスタンスのシリアル・コンソール接続の作成

コンソール接続の作成

左上のナビゲーションメニューから[コンピュート]-[インスタンス]を選択。選択したインスタンスの左下[リソース]からコンソール接続をクリックします。
image-20210628091918332.png
表示された[コンソール接続の作成]をクリックし、コンソール接続の作成を始めます。
image-20210628091956708.png
[公開キー・ファイル(pub)のアップロード] 既にキーペアは持っているのでこちらを選択。

選択された公開キー(pub)が表示されてます。

[コンソール接続の作成]をクリックし、接続がアクティブになることを確認します。
image-20210628092034483.png
右端のメニュー(3つのドット)をクリックすると、いくつかの接続が表示されるので、"Linux/Macのシリアル・コンソール接続のコピー"を選択し、文字列をコピーしておきます。

注意)Open SSH を利用する場合、Windows OS からアクセスをする場合でも"Linux/Macのシリアル・コンソール接続のコピー" を選択します。
image-20210628092108571.png
コピーした文字列は、Open SSHの接続コマンドのようです。

ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.anxhiljrssl65iqcsvzlivx4z2wudgigubw7jjrugymp654vyx7kkk3oyvta@instance-console.ap-tokyo-1.oraclecloud.com' ocid1.instance.oc1.ap-tokyo-1.anxhiljrssl65iqcvljfajo5a5swcfoclyxd6u6s2wyv3vapkgrsf3wgmyqq

シリアル・コンソールを使いローカルからインスタンスに接続

取得した文字列を使い、インスタンスのシリアル・コンソールに接続します。

Git Bash に取得した文字列をペーストして実行します。"Are you sure you want to continue connecting?" と聞かれるので、Yes を入力し進めます。
image-20210628092144972.png
再度 Yes/No を聞かれるので、ここも Yes で進めます。
image-20210628092337609.png
コンソールアクセスが成功し、ログインプロンプトが表示されました。
image-20210628092411810.png

メンテナンス・モードでブートする

SSH鍵を再設定するために、メンテナンス・モードでブートします。インスタンスのコンソール・メニューから再起動を実行します。再起動を実行すると、Git Bashの画面も連動して自動で動き出すので、PCの画面にGit Bashを表示しておきます。
image-20210628092447831.png
インスタンスの再起動によりGit Bash停止が始まります。次の起動が始まる前に、キーボードの「↓ (PGUP)」、「↑ (PGDN)」キーを押し続け自動起動を停止させます。

タイミングがあわないとメンテナンス・モードに切り替わらずに再びログインプロンプトが表示されてしまいます。この場合は再び 再起動 を実行して同じ操作を繰り返します。
image-20210628092518896.png
メンテナンス・モードへの切り替えが成功すると、ブートしたいカーネルが選択可能となるので選択し、画面下に表示されている案内に従い、'e' とタイプして編集モードに入ります。
image-20210628092550695.png
編集モードにて、カーソルを下に移動して linuxefi で始まる行を探し、行の末尾に以下文字列を追加します。

init=/bin/bash

image-20210628092647192.png
続いて、画面下に表示されている案内に従い、'Ctrl + x' とタイプしてインスタンスを再度ブートします。
image-20210628092756417.png
bashコンソールのプロンプトが表示され、インスタンスにアクセスできるようになりました。

SSH公開鍵を再登録する

巻末のドキュメントに従い、次の手順によりSSH公開鍵を再登録します。

1. SELinuxのポリシーをロード

/usr/sbin/load_policy -i

2. rootパーティションへの書き込み権限を取得

/bin/mount -o remount, rw /

3. SSH鍵を再登録するために、SSHのディレクトリに移動

cd ~opc/.ssh

4. 既存の認証済み鍵ファイルをリネーム

mv authorized_keys authorized_keys.old

5. 新たなSSH公開鍵を登録

echo '<再登録したい公開鍵の文字列>' >> authorized_keys

操作ログ例)
image-20210628093048251.png

6. SSH公開鍵のパーミッションを確認

この時点では、authorized_keys ファイルはrootユーザーで、ファイル権限が誰からもrw可となってました。

-rw-rw-rw-. 1 root root 398 Jun 14 00:21 authorized_keys

※ この状態でリブートしSSH接続確認した際に、Permission denied のエラーが表示されSSH接続に失敗しました。これを回避するには、オーナーやファイル権限を変更(chown/chgrp, chmodコマンド使用)して、ファイルのオーナー opc のみ r/w 可能とします。

-rw-------. 1 opc opc  398 Nov 20  2020 authorized_keys 

7. リブート

リブートします。

/usersbin/reboot -f

SSH接続の復旧確認

リブート後、ローカルの windows10 PCでPowerShell を起動し、SSHの接続を試みます。
新たなSSH公開鍵への接続に成功し、無事にSSH接続を復旧させることができました!
image-20210705111501785.png

参考URL

シリアル・コンソールでsshできないインスタンスのトラブルシュートをする

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?