Satellite ホストでSSHを有効にする

トラブルシューティングやデバッグを行う際、 Satellite ホストをコントロールプレーンやクラスターに割り当てる前、あるいは割り当てた後に、そのホストへのSSHアクセスが必要になる場合があります。

例えば、ホストの割り当てに問題がある場合、クラスタに割り当てる前に、root 以外のユーザーにホストへの SSH アクセスを許可することができます。

ホストへの SSH アクセスを有効にする手順については、以下のセクションを参照してください。

割り当て前のRHCOSホストで非rootのSSHを有効にする

RHCOS

CoreOS ホストでは通常ルートSSHアクセスが無効になっているため、 rootcore の両方でホスト割り当ての一部としてSSHアクセスが無効になっています。そのため、デフォルトの core ユーザーではない新しいルート以外のユーザーを追加することで、SSHアクセスを許可することができます。

この指示では、クラスタまたは制御プレーンに割り当てる前に、 Red Hat CoreOS ホスト上の新規ユーザーに SSH アクセスを有効にする方法を説明します。

トラブルシューティングが完了したら、これらの手順を元に戻し、SSH アクセスを無効にしてください。

  1. CoreOS ホストを作成した際に使用したホストアタッチイグニッションファイルに、 satellite ユーザーを新規作成します。 イグニッションファイルの passwd セクションを以下のように編集します。

        "passwd": {
            "users": [
                {
                    "name": "core",
                    "sshAuthorizedKeys": [
                        ""
                    ]
                },
                {
                    "name": "satellite",
                    "sshAuthorizedKeys": [
                        "ssh-rsa AAA... KEYNAME"
                    ],
                    "groups": [
                        "sudo"
                    ]
                }
            ]
        },
    
  2. SSH公開鍵を追加します。 SSHキー・ペアを作成するには、 ssh-keygen

    ssh-keygen -f ~/.ssh/sat-host-access -t rsa -b 4096 -C sat-host-access -P ''
    
  3. sat-host-access.pub ファイルには、イグニッションファイルに追加するキーが含まれています。 上記の例の ssh-rsa AAA... KEYNAME を置き換えて、ファイルの全内容をイグニッションスクリプトに追加します。 sat-host-access の秘密鍵は、ホストにSSH接続する際に使用します。

    このホストに追加した公開鍵に対応する秘密鍵を持っていて、ノードにネットワーク・アクセスできる人なら誰でも、このシステムにSSHでアクセスできる。

  4. オプション :以下の journalctl コマンドを実行して、デバッグ用のログを収集する。

    journalctl -u ibm-host-attach --no-pager
    
    journalctl -u ibm-host-agent --no-pager
    
    journalctl -u ibm-firstboot-ignition --no-pager
    

RHELホストへの割り当て前に、非root SSHを有効にする

RHEL

この手順では、RHELクラスタワーカーノードへの非root SSHアクセスを一時的に有効にする方法を説明します。

トラブルシューティングが完了したら、これらの手順を元に戻し、SSH アクセスを無効にしてください。

作業を開始する前に、未割り当てのホストへのルートSSHアクセス権があることを確認してください。

  1. この新しいユーザーに、このホストのルートユーザーと同じ SSH キーを使用したい場合は、別のキーは必要ありません。 ただし、この新しいユーザーに別のSSHキーペアを使用したい場合は、そのキーペアを用意するか、ホストにSSH接続する際に使用するシステム上で、新しいSSH公開鍵/秘密鍵ペアを作成してください。 秘密鍵を誰にも提供しないでください。 この手順では、この新しいキーペアを作成したことを前提としています。
    ssh-keygen -f ~/.ssh/sat-host-access -t rsa -b 4096 -C sat-host-access -P ''`
    

ホスト自体で残りの手順を実行します。そのため、先に進む前に、root権限でホストにSSH接続してください。

  1. ユーザーを作成し、パスワードなしでsudoにフルアクセスできるように設定します。

    useradd -U -m -s /bin/bash satellite && mkdir -p /home/satellite/.ssh && chown -R satellite:satellite /home/satellite/
    
  2. 新しいユーザーにSSHキーを追加してください。

    • このユーザーにルートユーザーと同じ SSH 鍵を使用したい場合は、以下のコマンドを実行してください。
        cp -r /root/.ssh/authorized_keys /home/satellite/.ssh/
        ```
    * 新しいキーペアを作成した、または既存の公開SSHキーをお持ちの場合は、次のコマンドを実行して、 `satellite` ユーザーに追加してください。
    ```sh {: pre}
        echo "<CONTENTS OF ~/.ssh/sat-host-access.pub OR YOUR OWN PUBLIC KEY>" >> /home/satellite/.ssh/authorized_keys && chmod 600 /home/satellite/.ssh/authorized_keys
        ```
    
  3. 次のコマンドを実行します。

    chown -R satellite:satellite /home/satellite/.ssh/authorized_keys
    
  4. この新しい satellite ユーザーにパスワードなしでsudoのフルアクセス権を与えるには、以下のコマンドを実行します。

    echo "satellite ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
    

    ユーザーの権限をより制限的に設定することもできます。その場合は、代わりにホスト上で設定してください。 トラブルシューティングの目的で、このユーザーにsudoへのフルアクセス権限を与えることをお勧めします。 トラブルシューティングが完了したら、ユーザーを削除するか、その権限を制限することができます。

    このホストとネットワークアクセスに追加した公開鍵に対応する秘密鍵を持つ者は誰でも、このシステムにルート権限でSSHログインすることができます。

  5. 新しいユーザーとしてノードにログインし、動作を確認します。

    ssh -i ~/.ssh/sat-host-access satellite@NODE-IP
    
  6. 次に、以下のコマンドを実行して、このユーザーからroot権限を取得できることを確認します。

    sudo su - root
    
  7. (任意): ホスト登録およびホストブートストラップ処理による各種ログ出力ファイルを確認してください。 <filepath> を、以下のファイルに順に置き換えてチェックインしてください。 問題に応じて、特定のログ・ファイルがホスト上に存在する場合と存在しない場合があります。

    1. ホスト登録試行の nohup.out ログ。
    2. 最初のブートストラッピング試行の /var/log/firstboot.log。 ホスト登録が失敗した場合、このファイルはありません。
    3. 最初のブートが失敗した場合の基本ブートストラッピング・プロセスの /tmp/bootstrap/bootstrap_base.log。 ホスト登録が失敗した場合、このファイルはありません。
        tail <filepath>
        ```
    1. `journalctl` コマンドを実行して、デバッグ用のログを収集する。
    
    ```sh {: pre}
        journalctl -u ibm-host-agent --no-pager
        ```
        ```sh {: pre}
        journalctl -u ibm-firstboot --no-pager
        ```
        ```sh {: pre}
        journalctl -u ibm-host-attach --no-pager
        ```
    
    

割り当て後のホストでルートSSHを有効にする

RHCOS RHEL

時折、クラスタ内のワーカーノードとしてすでに割り当てられているホストに直接SSH接続する必要が生じる場合があります。 例えば、クラスタのワーカーノードがクラスタのマスターとの接続を失うという問題が発生する可能性があります。 この手順では、 Satellite クラスタ内の Red Hat CoreOS または RHEL クラスタのワーカーノードで、一時的に root SSH アクセスを有効にする方法を説明します。

トラブルシューティングが完了したら、これらの手順を元に戻し、SSH アクセスを無効にしてください。

作業を始める前に、以下のものが揃っていることを確認してください。

  • クラスタワーカーに直接アクセスできるシステムにアクセスし、SSHクライアントシステムとして使用する。
  • このクラスタへの管理者アクセス権限を付与します。これにより、 oc debug node/NODE-NAME を実行できます。
  1. SSHクライアントでSSH公開鍵/秘密鍵のペアを作成します。 秘密鍵は誰にも渡さないでください。

    ssh-keygen -f ~/.ssh/sat-host-access -t rsa -b 4096 -C sat-host-access -P ''
    
  2. 公開鍵が作成されたことを確認します。

    cat ~/.ssh/sat-host-access.pub
    
  3. クラスタマスターにアクセスでき、管理者 kubeconfig 権限を持つシステムから、以下のコマンドを実行します。

    oc debug node/NODE-NAME
    
  4. NODE-NAME のシェルから以下のコマンドを実行して、root SSHを有効にします。

    chroot /host
    
    echo "<CONTENTS OF ~/.ssh/sat-host-access.pub>" >> /root/.ssh/authorized_keys
    
    chmod 600 /root/.ssh/authorized_keys
    
  5. 次のいずれかのコマンドを使用して、 SSHD_CONFIG_FILE の環境変数を設定します。 お使いのワーカーの正確なバージョンによっては、異なる場所に存在する可能性があることにご注意ください。その場合は、次の数ステップで更新できるように、 SSHD_CONFIG_FILE 環境変数を SSHD 設定ファイルのフルパスに設定してください。

    CoreOS ワーカー用のコマンド例。

    export SSHD_CONFIG_FILE="/etc/ssh/sshd_config.d/40-rhcos-defaults.conf"
    

    RHEL 9 ワーカーのコマンド例。

    export SSHD_CONFIG_FILE="/etc/ssh/sshd_config"
    
  6. PermitRootLogin の設定を確認してください。

    grep ^PermitRootLogin $SSHD_CONFIG_FILE
    
  7. PermitRootLoginyesに設定します。

    sed -i "s/PermitRootLogin no/PermitRootLogin yes/g" $SSHD_CONFIG_FILE
    
  8. 設定を確認してください。

    grep ^PermitRootLogin $SSHD_CONFIG_FILE
    
  9. 以下のコマンドを実行して、再起動して終了してください。

    systemctl restart sshd
    
    exit && exit
    

この時点で、先に作成した秘密鍵を使用して、SSHクライアントシステムからのルートSSHアクセスが有効になります。 この秘密鍵とノードへのアクセス権を持つ者は誰でも、このシステムにルート権限でSSHログインできることに注意してください。 ノードにSSH接続するには、次のコマンドを使用します: ssh -i ~/.ssh/sat-host-access root@NODE-IP