/etc/hostsのエントリの共有

サーバ台数が増えてくると/etc/hostsいじってssh hogeで接続するのがめんどくなる。
hostsが古くて別のサーバに接続してしまったり...
それにIP直指定は長いし、ホスト名だとzshの補完がきく。


NISとかNIS+とかLDAP使えばhostsの共有ができる。
この記事ではLDAPでやってみる...っていうかLDAPの記事ばっか書いてたんだからそういう流れです。
環境はDebianです。

参考記事

前々回の記事と同じくこの記事を参考にしてやってく。

MigrationToolsでhostsファイルをLDIF形式に変換

MigrationToolsを使えばhostsファイルからLDIF形式に変換できる。まずはインストールから。

$ sudo apt-get install migrationtools

なぜか/usr/share/migrationtoolsにスクリプトがインストールされる。
しかも現在のディレクトリにmigrate_common.phっていうファイルがないとスクリプトが動かないので、
cd /usr/share/migrationtoolsしないと使えない。
っていうか変なパスにインストールされる原因はそれだろうけど微妙すぎる。
めちゃめちゃ気になるけどとりあえず気にしないでおく。

$ cd /usr/share/migrationtools
$ ./migrate_hosts.pl /etc/hosts ~/hosts.ldif
$ cd
$ vim hosts.ldif # dc=padl,dc=com とかなってるところ :%s/padl/example/g で書き換え(sedでもいいけど)。
                 # あと、localhostだとか追加するつもりのないエントリも削除。

LDIF形式のファイルを登録

できたhosts.ldifを登録する前に、以下のテキストをhosts-base.ldif(なんでもいい)で保存してldapaddで登録しておく。

現在はグループ,ホスト情報用の親エントリがない状態ですので,リスト1のような親エントリを登録した後それぞれを登録します。

dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: example

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

dn: ou=Hosts,dc=example,dc=com
objectClass: organizationalUnit
ou: Hosts

第3回 もう一歩進んだUNIXアカウント:そろそろLDAPにしてみないか?|gihyo.jp … 技術評論社

保存したら、hosts-base.ldifとhosts.ldifの登録。

$ sudo ldapadd -x -D "cn=Manager,dc=example,dc=com" -f hosts-base.ldif -W
$ sudo ldapadd -x -D "cn=Manager,dc=example,dc=com" -f hosts.ldif -W

これでサーバの設定は終了。

クライアントの設定

クライアントの環境はUbuntuです。

PAMの設定は前々回の記事を参照。
とはいうものの、前回auth-client-configなんかも試したので一応設定ファイル置いておく...というか前回のと同じです。


前回と同じく/etc/auth-client-config/profile.d/以下に保存したら、以下を実行。

$ sudo auth-client-config -t pam-password,pam-auth,pam-session,pam-account -p my_ldap

そうすればPAMの設定ファイルのみ反映されるので、あといじるのは/etc/nsswitch.confのみ。

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

Ubuntuではこんなんなってたので、末尾にldapを追加。

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 ldap

で、保存すれば即座にssh hogeとかでログインできるはず。