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

Version 14

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう

     

    Oracle Cloud Infrastructure でLinuxインスタンスを作成するとデフォルトで sshd が起動し外部からsshでアクセスできるようになります。普通はこのsshで大抵の処理を行うことができますが、ごくたまにsshできない環境からアクセスが必要だったり、あるいはできていたsshが突然できなくなってしまったといった場合があります。そんなアクセスできないトラブル発生時に、コンソール・アクセスが有効な手段になる場合があります。

     

    このチュートリアルでは、Oracle Cloud Infrastructure のインスタンスに対してシリアル・コンソールやVNCコンソールを通じてアクセスする方法を学習します。

     

    また、今回はクライアントにWindows PCを利用します。Mac OS または Linux クライアントからのアクセスについては、マニュアルなどの別ドキュメントを参照してください。

     

     

    所要時間 : 約20分

     

    前提条件 :

    • Oracle Cloud Infrastructure で、作成済みのLinuxインスタンスがあること
    • コンソール・アクセスの認証に使用するSSH鍵ペアを作成済なこと

     

    注意 : チュートリアル内の画面ショットについては Oracle Cloud Infrastructure の現在のコンソール画面と異なっている場合があります

     

    はじめに シリアル・コンソールが有効なケースの整理

    コンソール・アクセスの代表的なユースケースには、以下のようなものがあります。

     

    1. 何らかの理由でOSがブートしないインスタンスにアクセスしてトラブル・シュートする
      • コンソールやAPI上ではインスタンスは起動しているのに、実際にはOSがブートしていないため、sshでログインしても応答が返ってこない、というケースが時々発生します
      • 特にBYOI(Bring Your Own Image)でオンプレミスのマシンイメージを持ち込んだ場合、何らかの設定ミスでブートしてこないというケースはまま発生します
      • そのような場合に、このシリアル・コンソールへのアクセスを利用することで、ブートシーケンスを見ながら原因の追求することができるようになります

    2. 秘密鍵が失われるなどしてsshアクセスできなくなったインスタンスに再びsshできるようにする
      • インスタンスにアクセスするためのssh秘密鍵をなくしてしまったり、パスフレーズを忘れてしまった場合、基本的回復は不可能です
      • しかしそのような場合でも、シリアル・コンソールを利用し、メンテナンスモードでbash shellにログインすることで、opcユーザーのauthorized_keysに新たなssh公開鍵を登録して、再びsshでアクセスできるようにすることができるようになります

    3. ローカル環境から22番ポート以外でインスタンスにアクセスする
      • ちょっと例外的な使い方ですが、シリアル・コンソールを利用することで、ローカル側からhttps(tcp/443)でインスタンスにアクセスをすることができるようになります
      • このため、もしローカル側のファイアウォールでssh(tcp/22)が閉じられている場合にも、インスタンスに対してアクセスすることができるようになります
      • ただし、シリアル・コンソールからのユーザーのログインを許可するために、予めアクセスしたいユーザーに対してパスワードを設定しておく必要があります

     

    1. アクセス元クライアントの準備

    クライアントが Mac OS や Linux の場合には、備わっているシェルとOpenSSHをそのまま使用することができますが、Windows OSの場合は追加で PuTTY(plink.exe) または OpenSSH をインストールする必要があります。

    今回は、Windows に Git for Windows をインストールし、そこに含まれる Git Bash シェルと、OpenSSHを利用します。

    また、適切なディレクトリにコンソール・アクセス用の秘密鍵を配置します。

    Git Bash 以外にも、OpenSSHが利用できるコマンドラインツール(シェル)であれば何でもOKです (例) Windows Subsystem for Linux、Cygwin、MobaXterm など

    PuTTY (plink.exe) を利用してもシリアル・コンソールにアクセスは可能ですが、筆者がためしたところGRUBブート画面でのキーアクセスがうまく受け付けてくれないなどの動きをします(原因は不明です)。OpenSSHの方が安定しているようですので、こちらを利用することをお勧めします

     

    1. https://git-scm.com/download/win にアクセスし、GIt for Windows をダウンロードし、インストールを完了します。

    2. Git Bash から ssh が実行できることを確認します。Windows 7 の場合は以下の方法で起動します
      • Windows キーを押して プログラムとファイルの検索 ボックスに git とタイプし、検索されたプログラムから Git Bash を選択します

    3. 立ち上がった Git Bash ウィンドウで、ssh と入力し、Enterキーを押します
      以下のようなヘルプ出力が返ってきたら、Git Bash のインストールは無事完了しています


    4. Windowsからエクスプローラーを開き、上のパス入力フィールドに %homedrive%%homepath% と入力し、Enter キーを押します

      WS000187.JPG
    5. 「.ssh」 というフォルダを新しく作成し、予め作成しておいたssh鍵ペアのうち秘密鍵をコピーし、id_rsa という名前で保存します(拡張子なし)


    以上で、ローカルPC側の準備は完了です。

     

     

    2. インスタンスでのコンソール接続許可の作成

    インスタンスは、作成した初期状態ではシリアル・コンソール・アクセスが許可されていません。許可するには、OCIのコンソール画面またはAPIから Console Connection というオブジェクトをインスタンス毎に作成し、コンソール・アクセスを許可する必要があります。

     

    1. コンソールメニューから ComputeInstances を選択し、シリアル・コンソール接続を許可したいインスタンスの名称のリンクをクリックします

    2. 画面の左下の Resources メニューから Console Connections を選択します

    3. Create Console Connection ボタンを押します
    4. 立ち上がった Create Console Connection ウィンドウに以下の項目を入力し、Create Console Connection ボタンを押します
      • SSH KEY - 以下のいずれかを実行します
        • CHOSE SSH KEY FILES ラジオボタンを選択した上で、Browse ボタンを押し、ローカルにあるSSH公開鍵ファイル(console.pub)を選択
        • CHOSE SSH KEY FILES ラジオボタンを選択した上で、下部の Drop SSH key files here... フィールドにローカルにあるSSH公開鍵ファイルをドラッグ & ドロップ
        • PASTE SSH KEYS ラジオボタンを選択した上で、下部のフィールドにローカルにあるSSH公開鍵の文字列をコピー & ペースト

          WS000185.JPG
    5. コンソール上に作成したコンソール接続が表示され、ステータスが ACTIVE になっていることを確認します

      WS000186.JPG

     

    3. シリアル・コンソール接続文字列の取得

    コンソール接続の作成が完了すると、画面やAPIなどから接続に必要な情報を取得することができます。

     

    1. 作成したコンソール接続の右の・・・メニューを開き、 Connect with SSH を選択します

    2. 立ち上がった Connect With SSH ウィンドウで、PLATFORMLINUX / MAC OS を選択し、CONNECTION STRING ボックス左下の Copy リンクをクリックし、接続文字列をクリップボードにコピーします

      Windows OS クライアントからアクセスをする場合でも、OpenSSH を利用する場合は PLATFORM に WINDOWS ではなく LINUX / MAC OS を選択してください
      (WINDOWS は PuTTY (plink.exe) 経由でアクセスをする場合にのみ使用します)


      WS000191.JPG

    3. 【任意】コピーした文字列を、任意のテキストエディタに保存します

     

     

    4. インスタンスのシリアル・コンソールに接続

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

     

    1. Windows プログラムから、Git Bash を起動します。Windows 7 の場合は以下の方法で起動します
      • Windows キーを押して プログラムとファイルの検索 ボックスに git とタイプし、検索されたプログラムから Git Bash を選択します

    2. 立ち上がった Git Bash ウィンドウに、先ほどコピーした接続文字列をペーストし、Enterキーを押します

    3. はじめてアクセスしているため、既知のホストに登録するかどうかを聞かれます。 Are your sure you want to continue connecting (yes/no)? と質問されるので、yes と入力し Enterキーを押します

    4. コンソール・アクセスは踏み台を経由して行うため、もう一度同じ質問をされます。再び yes と入力し、Enterキーを押します

    5. これでコンソール・アクセスは完了しています。もういちど Enter キーを押すと、ログインプロンプトが表示されます。

     

     

    以上で、シリアル・コンソールへのアクセスは完了です。

     

     

    5. シリアル・コンソールを使ってメンテナンス・モードでブートする

    シリアル・コンソールを利用すると、インスタンスをメンテナンス・モードでブートを行うことができるようになります。

    これにより、ブートできなくなったインスタンスの設定情報を変更したり、ログインできなくなったssh鍵を入れ替えたりすることができるようになります。

     

    1. ステップ4までを完了し、シリアル・コンソールに接続した状態にします

    2. Oracle Cloud Infrastructure のコンソールメニューから、作業を行いたいインスタンスの詳細ページにアクセスし、Reboot ボタンを押します

    3. リブートプロセスが開始されたら、シリアル・コンソールの端末ウィンドウに戻ります。端末ウィンドウにメッセージが表示されはじめます。
      GRUBブートメニューがウィンドウに現れたら、すぐにキーボードの「上(↑)」「下(↓)」キーを入力して、自動起動プロセスを停止します
      ブートしたいカーネルを選択した後、ブートメニューで、e とタイプし、ブート・エントリーの編集モードに入ります

    4. 編集モード画面で、linuxefi (Oracle Linux 7.xの場合) または kernel (Oracle LInux 6.xの場合) で始まる行を探し、行の末尾に、以下の文字列を追記します

      init=/bin/bash

      WS000190.JPG
    5. CTRL + x キーを押し、インスタンスを再度リブートします。ブートが完了すると、メンテナンスモード(bashコンソール)にアクセスできるようになります。

     

    5. メンテナンス・モードでシステム設定ファイルを編集する

    起動できなくなったインスタンスのシステム設定ファイルを編集するには、以下のステップを実行してSELinuxの設定を変更し、rootパーティションへの書込権限を取得する必要があります。

     

    1. メンテナンス・モードのBashシェルにおいて、以下のコマンドを入力してSELinuxのポリシーをロードします。
      /usr/sbin/load_policy -i
    2. 以下のコマンドを実行し、rootパーティションへの書込権限を取得します
      /bin/mount -o remount, rw /
    3. システム設定ファイルを変更し、再度ブートできるようにします。

    4. システム設定ファイルの変更が完了したら、以下のコマンドでリブートをかけます
      /usr/sbin/reboot -f

     

    6. インスタンスのssh鍵を再登録してアクセスを回復する

    秘密鍵を失うなどの理由でsshでリモートアクセスできなくなった場合に、シリアル・コンソールを利用してssh鍵を再登録することができます。

     

    1. メンテナンス・モードのBashシェルにおいて、以下のコマンドを入力してSELinuxのポリシーをロードします。
      /usr/sbin/load_policy -i
    2. 以下のコマンドを実行し、rootパーティションへの書込権限を取得します
      /bin/mount -o remount, rw /
    3. Bashシェル以下を実行し、ssh鍵を再登録したいユーザーのsshディレクトリに移動します

      cd ~opc/.ssh

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

      mv authorized_keys authorized_keys.old

    5. 新しいssh公開鍵を追加します

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

    6. 変更が完了したら、以下のコマンドでリブートをかけます

      /usrsbin/reboot -f

    これで、この章の作業は終了です。

     

    Oracle Cloud Infrastructure では、インスタンスへのアクセス方法として、このチュートリアルで紹介したシリアル・コンソールの他に、VNCによるコンソール・アクセスも用意しています。用途に合わせて適切なアクセス方法を利用してみてください。

     

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう