問題の説明
Oracle Cloud インスタンスに接続しようとした際、使用していた SSH 鍵が破損または紛失したため、クラウドインスタンスに接続できなくなりました。
エラーメッセージは以下の通りです:
Permission denied (publickey).
解決方法
インスタンスのブートボリュームを切り離し、新しいインスタンスにアタッチして新しい SSH 鍵を追加し、最後にブートボリュームを元のインスタンスに再アタッチします。
注意:本記事のスクリーンショットは失われています(元の画像ホスト cdn.staticaly.com はサービスを終了しました)が、テキスト手順は完全に利用可能です。Oracle Cloud コンソールのインターフェースは変更されている可能性がありますので、実際のインターフェースに従ってください。
詳細手順
1. 接続できないインスタンスを停止する
コンソールからインスタンスの詳細ページにアクセスし、停止ボタンをクリックします。
2. ブートボリュームを切り離す
インスタンスの詳細ページ下部でブートボリュームを見つけ、該当するブートボリュームの三点リーダーをクリックし、「ブートボリュームの切り離し」を選択します。
3. ブートボリュームをアクセス可能なインスタンスにアタッチする
注意:ここでブートボリュームをアタッチするインスタンスはアクセス(接続)可能である必要があります。後ほどこのインスタンスに接続してブートボリュームをマウントします。
コンソールでアクセス可能なインスタンスを見つけ、「アタッチされたブロックボリューム」から「ブロックボリュームのアタッチ」をクリックし、先ほど切り離したブートボリュームを選択してアタッチします。
4. iSCSI コマンドを使用してブートボリュームを実行中のインスタンスにマウントする
SSH でアクセス可能なインスタンスに接続し、iSCSI コマンドを使用してブートボリュームを実行中のインスタンスにマウントします。
iSCSI コマンドは、アタッチされたブロックボリュームのページで、先ほどアタッチしたブートボリュームの三点リーダーをクリックすると表示されます。
Linux タブを展開し、Linux iSCSI 接続コマンドをコピーして、接続済みのインスタンス上で実行します。
5. authorized_keys ファイルを修正する
sudo su -
fdisk -l
mount /dev/sdb1 /mnt
sudo vi /home/opc/.ssh/authorized_keys
sudo vi /home/ubuntu/.ssh/authorized_keys
umount /mnt
6. iSCSI コマンドを使用してブートボリュームをアンマウントし、切り離す
Linux iSCSI 切断コマンドをコピーし、接続済みのインスタンス上で実行します。
fdisk -l コマンドでブートボリュームがアンマウントされたことを確認したら、ブートボリュームを切り離せます。
7. ブートボリュームを元のインスタンスにアタッチする
コンソールで元のインスタンスを見つけ、「アタッチされたブロックボリューム」から「ブロックボリュームのアタッチ」をクリックし、先ほど切り離したブートボリュームを選択してアタッチします。
ブートボリュームのアタッチが完了するのを待ち、インスタンスの起動ボタンをクリックしてインスタンスを起動すると、新しい SSH 鍵でインスタンスにログインできるようになります。
