OCIのコンソール接続のハマりポイント。パスワードでログインできるユーザーがいないと詰む
Oracle Cloud Infrastructure (OCI) では設定をミスして SSH ログインができなくなった場合にコンソール接続ができます。
ミスしてコンソール接続をする羽目になってしまったので経験をシェアしておきます。
OCI のコンソール接続はハマりポイントがあります。
私のミスというかは、コントロールパネル (CyberPanel)をインストールをしてファイヤーウォールを弄ったら、自分で作った設定が全て書き換えられてしまってSSHでログインできなくなりました。
ファイヤーウォールのルールを追加するのではなく全部入れ替えだとは…。
テストサーバーなのでインスタンスを作り直せば良いだけで焦らなかったのですが、インスタンスを終了させる前に、せっかくなのでコンソール接続をしてみようとやってみました。
ネットにはあまり情報が無くちょっと手間取りました。
目次
コンソール接続をする
オラクルのドキュメントはこちらです。
ちょっと分かり難いので私なりに説明していきます。
「インスタンスの詳細」にある「コンソール接続」でコンソール接続を作ります。
鍵のペアが自動的に作られますので、秘密鍵をダウンロードします。公開鍵は必要ありません。
コンソール接続を作ったら、右側の三点マークから、「Linux/Mac のシリアル・コンソール接続のコピー」を選びます。コピーするとコマンドがクリップボードに入ります。
下のようなコマンドです。
ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.*******************' ocid1.instance.oc1.ap-tokyo-1.**************************
ちなみに、私は Windows を使っているので最初は「Windows の~」を選んだのですが、こちらは PowerShell を使う人用のものです。
Linux のコマンドを知っている人は Git Bash でコピーしたコマンドを使うのが楽です。
なお、Windows のコマンドプロンプトでも大丈夫だろうと思ってやってみたのですが、コマンドに "%h:%p" が入っていてうまく動きませんでした。置き換えれば大丈夫そうですが。
今回は Git Bash を使います。Git Bash は Git for Windows をインストールすると一緒に入ります。
ハマりポイント: 秘密鍵の場所
基本的には Git Bash でコマンドを貼り付けて Enter を押すだけで良いのですが、秘密鍵を置く場所が全く説明されていません。分かり難いです。
Git Bash は Windows ではユーザーフォルダの下の ".ssh" の "id_rsa" というファイルを読み込みます。例えば下のような位置です。
C:\Users\Admin\.ssh\id_rsa
ここに「コンソール接続の作成」の時にダウンロードした秘密鍵を置けばOKです。
それか、「ssh -i」として鍵の位置を指定する手もあります。
この場合、下のようなコマンドになります。
ssh -i C:\AAAA\BBBBB.key -o ProxyCommand='ssh -i C:\AAAA\BBBBB.key -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.ap-tokyo-1.*******************' ocid1.instance.oc1.ap-tokyo-1.**************************
2回指定する必要があります。
Enter を押してコマンドを実行します。
ここで、
Permission denied (publickey)
というエラーが出た場合は秘密鍵が読み込めていません。
接続に成功するとホストの登録の Warning が出つつ、インスタンスにコンソール接続できます。
ハマりポイント: VNC 接続は要らない
ネット上ではこの状態のままにして VNC で接続をする、と説明しているものが多いのですが、必要ありません。
VNC接続は接続先のサーバーが Windows などで GUI がある場合に役立つでしょう。接続先が Linux の場合は試してみたところ、Git Bash と同じ黒い画面に白い文字がそのまま映るだけです。
そもそもVNC接続をしたい場合はコマンドが違いますので、コピーするコマンドは「VNC接続のコピー」を選びましょう。この前使ったSSHトンネルを使っていて、ローカルポートの転送が設定されています。

VNC接続をする場合は VNC を起動して "localhost:5900" に接続すればOKです。5900番はどこから出てきたのかというと、コマンドにポート番号が入っています。将来的に変わるかもしれないのでコマンドを確かめながらどうぞ。
コンソール接続が成功すると上のスクリーンショットの状態のまま止まっているのですが、ここで一度 Enter を押すとログインの文字列が表示され、ユーザー名の入力になります。
ハマりポイント: ユーザーにパスワードを設定していないとログインできない
これ、最大のハマりポイントですが、OCI のインスタンスはユーザーのパスワードを設定していません。
Ubuntu ならデフォルトユーザー名は Ubuntu と分かっているのですが、パスワードは設定されていません。
せっかくコンソール接続ができてもユーザー名とパスワードがないとログインできないのです。
「えー、じゃあコンソール接続しても意味ないじゃん」
その通りです。私も困ったのですが、コントロールパネルのインストールが sudo ではなく完全に root として実行する必要があり、root のパスワードを設定していて助かりました。
パスワードを設定していない場合、ここで詰みです。
ですが、最後に試してみる手段があります。
英語で検索すると出ますが、コンソール接続中にインスタンスの再起動をして、boot entry を書き換えるという手があるようです。
結構大変な高度な手段です。ですが他に手がなければ最後にお試しを。
ユーザーにパスワードを設定しておこう
何かやってしまってコンソール接続したい時が来るかもしれませんので、OCI を使うならユーザーにパスワードを設定しておいた方が良いでしょう。
どのユーザーにもパスワードがないのでコンソール接続時に困ります。セキュリティ上の理由から root にパスワードが無いのだと思いますが。
といっても OCI の Ubuntu は sudo でパスワードを訊かれませんので、root 権限で簡単に実行できます。
私は以前 CentOS を使っていてほとんど root だったので、Ubuntu のコマンドは毎回 sudo を付けるのが面倒です。root に昇格すると楽ですね。
Ubuntu では root に昇格する際にはパスワードが必要になるので、そこで root にパスワードを設定していました。今回はこれで助かったわけです。
root でなくても良いのですが、ユーザーのどれか1つはパスワードを設定しておかないと大変なことになります。
ということで、OCI ではパスワード設定をしておいた方が安心です。