SSH公開鍵を配布するシステム


26

複数の人が管理するさまざまなシステムがあります。これらのシステムにアクセスするには、SSH公開キー認証を使用することにしました。管理アカウントのパスワードを管理または共有する必要がなく、さまざまなシステムへのパスワードを覚える必要がない(プライベートキーへのパスフレーズのみ)、すべてのリモートコマンドと対話する(パスワードを入力する)必要がないため、これは非常に効果的です。

問題は、システムにインストールされた公開鍵を何らかの方法で管理する必要があることです。人々が行き来し、鍵が危険にさらされ、責任が変化する可能性があります(今日、あるシステムに入ることを許可された人は、明日、別のシステムにアクセスすることを許可される場合があります)。現在、それを必要とするすべてのアカウントで〜/ .ssh / authorized_keysファイルを手動で編集することで管理していますが、それは多くの作業であり、間違いを起こしやすいです。

そのようなシナリオで公開鍵を管理するための準備ができているツールはありますか?独自のソリューションはありますか?または、システムをこのように管理するという考え全体に欠陥があるのでしょうか?


私は本当にあなたの質問に答えることはできませんが、私がそれを読んだとき、ある種のデータベースシステムで叫んでいるのを聞くことができました。
ジョンガーデニアス

実際、「バックエンド」(「キーサーバー」)にデータベースの場所を見つけることができますが、データベースアクセスを制限し、キーをSSHチャネル経由で配布することを希望します。管理対象システムで他の通信チャネルを開かないでください。実際、私はそのようなツール/システムを自分で実装できると感じていますが、準備ができて効果的なものを好むでしょう。
ヤチェクコニエチュニー

回答:


18

pulegiumで既に述べたように、PuppetChefBcfg2、またはcfengineなどの一般的な構成管理ソフトウェアは、タスクを達成できます。

以来のauthorized_keysファイルが複雑されていないことを、あなたはまた、使用することができますrsyncのなど(D)SCM gitのか、HGは、このファイルを管理すること。サーバーの1つに「マスター」ファイルがあり、rsync / git / hg /…経由で提供します。他のすべてのサーバーでcronジョブを実行し、マスターコピー(変更されている場合)を定期的に取得して、正しいローカルの場所にコピーします。ちなみに、これは純粋なHTTPまたはFTPでも動作します。

一番下の行は、authorized_keysファイルの「マスター」コピーを1つ持って更新します。「クライアント」(現在のauthorized_keysファイルが必要なコンピューター)がマスターサーバーからそれを取得し、ローカルに展開できるようにします。


1
快適にpuppetを使用して、〜200台のLinuxサーバーを管理します(pubキーは、ユーザーの属性として適用する単なるファイルです)。
フォージマン

1
私は良くならないだろうと思われるので、この答えを受け入れます。1.今のままにしておく2. authorized_keysファイルを管理する独自のツールチェーンを構築する3. PuppetやChefなどの既存の汎用ツールを使用してサーバーを管理する…この簡単なタスク。4.他の認証/承認メカニズム(Kerberosなど)を使用します。これは単純なタスクにはあまりにも洗練されたツールのようです。ありがとうございます。
ヤチェクコニエチュニー

このシステムは、マスターコピーがプルされるチャネルと同じくらい安全です。
yrk

1
Ansibleは非常に軽量なCMシステムであり、sshを介して認証済みのキーファイルを使用して処理するモジュールを備えています。参照してくださいansible.cc/docs/modules.html#authorized-key
RS

11

OpenSSHには、LDAPサーバーから公開鍵を使用できるようにするパッチがありますが、これは、そのLDAPサーバーに対しても認証/アカウントチェックが行われる場合にのみ意味があります(これは私の環境の設定方法です)。また、LDAP構成と同じくらい安全です(したがって、SSLの使用とキーの検証が必要です)。

パッチおよび詳細については、http://code.google.com/p/openssh-lpk/を参照してください。デフォルトでこのパッチが付属しているOSは知りませんが、FreeBSDを実行している場合、ポートからOpenSSHを使用する場合のオプションのパッチです。


1
ちなみに使用してpam_ldapのも、あなたが解決することができます「アクセスを許可されないことが、今日のアクセスマシンAに認可誰かをそれ明日」問題-あなたはその点に興味があるなら... pam_ldapの上に読んで
voretaq7

5

私は非常に簡単なソリューションを実行しますが、これはファイアウォールルールでも同じです

サンプルファイルhosts.conf:

192.168.0.1
192.168.2.99
192.168.2.100

distribute.sh:

#!/bin/bash
for d in `cat ./hosts.conf`; do
  echo "copying to $d ...";
  scp /root/.ssh./authorized_keys root@$d:/root/.ssh./authorized_keys
done;

それは全体の魔法です:-)


5

現在、SSH KeyDBをチェックアウトしています。ロール、サーバー、ユーザーの管理、ユーザーキーの配布、ホストキーの収集などを正確に行うためのものです。「ロケーション」と呼ばれるものもあります。

私はまだそれをすべて解決しておらず、完全に機能しているかどうかはわかりません。ただし、コードはpythonであり、かなり管理しやすいようですので、ほこりを払って動作させるのはそれほど難しくないはずです。


1

多くの人があなたが何を意味するのか分かりませんし、あなたが喜んで変更するかどうかも知りませんが、Kerberosはあなたが探しているドロイドです。これにより、問題がエレガントに解決され、人とマシンの両方が認証されます。


1

あなたが解決しようとしている2つの(一般に3に変わる)異なる問題があります:

  • 認証(あなたは誰ですか?)
  • 許可(このサーバーへのアクセスは許可されていますか?)
  • 監査(何をしましたか?)

公開鍵認証は、時々認証するのに適切な方法ですが、認証にはまったく対応していません。適切なコントロールがなければ、公開鍵認証は(特に内部的に)非常に簡単に侵害されるため、好きではありません。

そこで、Kerberosのようなソリューションが登場します。Windowsの世界では、Active Directoryがこの問題を解決します。Unixの世界では、選択肢が豊富にありますが、これは良いことでも悪いことでもあります。

Red Hat FreeIPAプロジェクトをチェックしてください。このプロジェクトは、ADに似たKerberos / LDAP / DNSシステムを簡単にすばやく起動して実行できるソフトウェアのバンドルです。


認証、承認、監査の違いを理解しています。また、SSHの「authorized_keys」は、認証データと承認データの両方を提供します。完璧とはほど遠いですが、簡単です。そして、セキュリティにおいても、単純さはしばしば大きな利点です。複雑なインフラストラクチャを備えたKerberosは、authorized_keysファイルを使用したsshよりも多くの点でセキュリティに失敗する可能性があります。ただし、どちらかがより安全であることを意味するものではありません。
ヤチェクコニエツニー

authorized_keysファイルの管理は、少数のサーバーではnpですが、管理が不可能になるポイントにすぐに到達します。私はそれが「悪い」解決策だと言うつもりはありませんでした。同様に、Kerberosの複雑さは2台のサーバーには不適切です...しかし、大規模な環境では、Kerberosの設計/実装への投資は価値があります。
duffbeer703

1

Bcfg2bcfg2-accountsを使用して配布できますauthorized_keys。追加ボーナスとして、ユーザーとグループを制御することができます。

Bcfg2は、SSHbaseを使用/etc/ssh/ssh_known_hostsした簡単なメンテナンスも可能に します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.