12.5. ホストの公開 SSH キーの管理

OpenSSH は、公開キーを使ってホストに対して認証を行います。あるマシンが別のマシンに対してアクセスを試みると、キーのペアを提示します。ホストが最初に認証する際は、ターゲットマシンの管理者は、この要求を手動で認証する必要があります。するとマシンはホストの公開キーを known_hosts ファイルに保存します。リモートのマシンがターゲットマシンにアクセスを再度試みると、ターゲットマシンは known_hosts ファイルをチェックして、認証済みホストに自動的にアクセスを許可します。
このシステムには、以下のような問題があります。
  • known_hosts ファイルは、ホストエントリーをホスト IP アドレス、ホスト名、およびキーという 3 項目で保存します。IP アドレスが変更されたり (仮想環境やデータセンターでは一般的)、キーが更新されたりすると、このファイルはすぐに無効になってしまいます。
  • SSH キーは、環境内の全マシンに手動かつ個別に配布する必要があります。
  • 管理者は設定に追加するホストキーを許可する必要がありますが、ホストまたはキー発行者を適切に検証することが困難なことから、セキュリティー問題が発生する可能性があります。
Red Hat Enterprise Linux では、System Security Services Daemon (SSSD) が SSH キーをキャッシュ、取得するよう設定して、アプリケーションやサービスがホストキーを 1 カ所で探せるようにできます。SSSD は Identity Management を ID 情報プロバイダーとして使用できるので、Identity Management をキーの汎用かつ集中化リポジトリーとすることができます。このため管理者は、ホスト SSH キーの配布や更新、検証を心配する必要がありません。

12.5.1. SSH 鍵の形式

キーを IdM エントリーにアップロードする際には、キーの形式は OpenSSH-style key か生の RFC 4253-style blob にすることができます。RFC 4253-style key は、IdM LDAP サーバーにインポート、保存される前に、自動的に OpenSSH-style key に変換されます。
IdM サーバーは、アップロードされたキーブロブから、RSA または DSA キーといったキーのタイプを識別することができます。しかし、~/.ssh/known_hosts のようなキーファイルでは、キーのエントリーはサーバーのホスト名および IP アドレス、キーのタイプ、最後にキー自体で識別されます。例を示します。
host.example.com,1.2.3.4 ssh-rsa AAA...ZZZ==
これはユーザーの公開キーエントリーとは多少異なります。ユーザーの公開キーエントリーの要素は、type key== comment という順序になります。
"ssh-rsa ABCD1234...== ipaclient.example.com"
キーファイルからの 3 要素はすべて、ホストエントリーにアップロードし、表示することができます。その場合、~/.ssh/known_hosts ファイルからのホスト公開キーエントリーがユーザーキーの形式 type key== comment に一致するように順序を変える必要があります。
ssh-rsa AAA...ZZZ== host.example.com,1.2.3.4
キータイプは公開キーのコンテンツから自動的に判断されます。個別のキーの識別を容易にするコメントはオプションになります。必須要素は、公開キーブロブ自体のみとなります。

12.5.2. ipa-client-install および OpenSSH

ipa-client-install スクリプトはデフォルトで、OpenSSH サーバーと IdM クライアントマシン上のクライアントを設定します。また SSSD がホストおよびユーザーキーのキャッシングを実行するように設定します。実質的には、クライアントを設定するだけで、ホストがキーキャッシングおよび取得のために SSSD、OpenSSH、および Identity Management を使用するすべての必須設定が実行されます。
SSH サービスがクライアントインストール時に有効にされている場合 (これがデフォルト)、ssh サービスの初回起動時に RSA キーが作成されます。

注記

ipa-client-install を使用して IdM クライアントとしてマシンを追加する場合、クライアントには RSA および DSS という 2 つの SSH キーが作成されます。
ipa-client-install コマンドには --ssh-trust-dns という設定オプションもあり、これを一緒に実行すると、OpenSSH が キーフィンガープリントを保存している IdM DNS レコードを信頼するように自動設定します。
別の方法では、--no-sshd を使ってクライアントインストール時に OpenSSH を無効にすることができます。これにより、インストールスクリプトは OpenSSH サーバーを設定できなくなります。
--no-dns-sshfp というもうひとつのオプションは、ホストが自身の DNS エントリーで DNS SSHFP レコードを作成できないようにします。これは --no-sshd オプションとの併用も可能です。

12.5.3. ホスト SSH 鍵の Web UI でのアップロード

  1. ホストのキーは、~/.ssh/known_hosts から取得できます。例を示します。
    server.example.com,1.2.3.4 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApvjBvSFSkTU0WQW4eOweeo0DZZ08F9Ud21xlLy6FOhzwpXFGIyxvXZ52+siHBHbbqGL5+14N7UvElruyslIHx9LYUR/pPKSMXCGyboLy5aTNl5OQ5EHwrhVnFDIKXkvp45945R7SKYCUtRumm0Iw6wq0XD4o+ILeVbV3wmcB1bXs36ZvC/M6riefn9PcJmh6vNCvIsbMY6S+FhkWUTTiOXJjUDYRLlwM273FfWhzHK+SSQXeBp/zIn1gFvJhSZMRi9HZpDoqxLbBB9QIdIw6U4MIjNmKsSI/ASpkFm2GuQ7ZK9KuMItY2AoCuIRmRAdF8iYNHBTXNfFurGogXwRDjQ==
    必要に応じて、ホストキーを生成します。OpenSSH ツールを使用の場合は、空白のパスフレーズを使用し、キーをユーザーの ~/.ssh/ ディレクトリー以外の場所に保存して、既存のキーを上書きしないようにします。
    [jsmith@server ~]$ ssh-keygen -t rsa -C "server.example.com,1.2.3.4"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/jsmith/.ssh/id_rsa): /home/jsmith/.ssh/host_keys
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/jsmith/.ssh/host_keys.
    Your public key has been saved in /home/jsmith/.ssh/host_keys.pub.
    The key fingerprint is:
    SHA256:GAUIDVVEgly7rs1lTWP6oguHz8BKvyZkpqCqVSsmi7c server.example.com
    The key's randomart image is:
    +--[ RSA 2048]----+
    |              .. |
    |               .+|
    |          o   .* |
    |         o . .. *|
    |        S + .  o+|
    |         E . .. .|
    |        . = .  o |
    |         o .  ..o|
    |            .....|
    +-----------------+
  2. 公開キーをキーファイルからコピーします。完全なキーエントリーは、hostname,IP type key== の形式で、必要なのは key== の部分だけですが、エントリー全体を保存することもできます。エントリー内の全要素を使用するには、エントリーを配列しなおして、type key== [hostname,IP] の順序にします。
    [jsmith@server ~]$ cat /home/jsmith/.ssh/host_keys.pub
    
    ssh-rsa AAAAB3NzaC1yc2E...tJG1PK2Mq++wQ== server.example.com,1.2.3.4
  3. Identity タブを開き、Hosts サブタブを選択します。
  4. 編集するホスト名をクリックします。
    ホストの一覧

    図12.4 ホストの一覧

  5. Settings タブの Host Settings エリアで、SSH public keys の横にある Add をクリックします。
    SSH キーの追加

    図12.5 SSH キーの追加

  6. ホストの公開キーを貼り付けて、Set をクリックします。
    SSH キーの設定

    図12.6 SSH キーの設定

    これで SSH public keys フィールドに、新しいキーが表示されます。Show/Set key をクリックすると、追加したキーが表示されます。
  7. 複数のキーをアップロードするには、公開キーリストの下にある Add をクリックして、他のキーをアップロードします。
  8. すべてのキーが追加されたら、ホストページ上部の Save をクリックして、変更を保存します。
公開キーが保存されると、エントリーにはキーの指紋、コメント (ある場合)、キーのタイプが表示されます [2]
ホストキーをアップロードしたら、Identity Management を ID ドメインの 1 つとして使用するよう SSSD を設定し、OpenSSH がホストキー管理に SSSD ツールを使用するよう設定します。これは、the "Configuring Services: OpenSSH and Cached Keys" section in the System-Level Authentication Guide で説明しています。

12.5.4. コマンドライン からホストキーを追加する

ホスト SSH キーが IdM のホストエントリーに追加されるのは、host-add を使ってホストを作成する際か、エントリーを後で修正する際になります。

注記

インストールスクリプトで SSH サービスが明示的に無効にされなければ、ipa-client-install コマンドで RSA と DSS ホストキーが作成されます。
  1. host-mod コマンドを --sshpubkey オプションと実行して、base64 暗号化公開キーをユーザーエントリーにアップロードします。
    ホストキーを追加するとホストの DNS SSHFP エントリーも変更されるので、--updatedns オプションも使ってホストの DNS エントリーも更新します。
    例を示します。
    [jsmith@server ~]$ ipa host-mod --sshpubkey="ssh-rsa RjlzYQo==" --updatedns host1.example.com
    キーは通常はイコール記号 (=) で終わりますが、実際にはもっと長いものになります。
    複数のキーをアップロードするには、複数の --sshpubkey コマンドラインパラメーターを入力します。
    --sshpubkey="RjlzYQo==" --sshpubkey="ZEt0TAo=="

    注記

    ホストは複数の公開キーを持つことが可能です。
  2. ホストキーをアップロードしたら、Identity Management を ID ドメインの 1 つとして使用するよう SSSD を設定し、OpenSSH がホストキー管理に SSSD ツールを使用するよう設定します。これは、the "Configuring Services: OpenSSH and Cached Keys" section in the System-Level Authentication Guide で説明しています。

12.5.5. ホストキーの削除

ホストキーは、期限が切れるか有効でなくなると、削除することができます。
個別のホストキーを削除する一番簡単な方法は、Web UI によるものです。
  1. Identity タブを開き、Hosts サブタブを選択します。
  2. 編集するホスト名をクリックします。
    ホストの一覧

    図12.7 ホストの一覧

  3. SSH public keys エリアで、削除するキーの指紋の横にある Delete をクリックします。
    公開キーの削除

    図12.8 公開キーの削除

  4. ホストのページの上部にある Save をクリックして変更を保存します。
コマンドラインツールを使ってすべてのキーを削除することもできます。ipa host-mod--sshpubkey= の値を空白にして実行します。これでホストのすべての公開キーが削除されます。また、--updatedns オプションを使うと、ホストの DNS エントリーが更新されます。例を示します。
[jsmith@server ~]$ kinit admin
[jsmith@server ~]$ ipa host-mod --sshpubkey= --updatedns host1.example.com


[2] キータイプは、アップロードされたキーに含まれていない場合、キー自体から自動的に判断されます。