黒川温泉産のLDAPサーバでSSH公開鍵認証する

ども。
温泉太郎ことP山です。

週末社内のSlackで@antipopさん、@hsbtさん、@buty4649さんと雑談していて、gcloudっぽく楽にログインしたいっすよねーっていう話をしていて、↓こんな感じ。

$ gcloud compute ssh <インスタンス名> --zone <ゾーン名>

このあたりを大いに参考にさせてもらいつつ、温泉に入りながらリゾートワークならぬ湯治ワークで土台となるcookbook書いた。

内容としてはLDAPサーバ1台とsshログインされるサーバが1台立ちます。
sshログインされるサーバに対して指定されたユーザーでssh接続を行うと、
sshログインされるサーバがLDAPにクエリを投げ、該当のユーザーの公開鍵を取得し、
取得できれば公開鍵ログインが行われるという感じです。

ちなみに取っ掛かりなSampleCookBookなので

「あー、なるほど、こんな設定すればいいんだ!!」

くらいに思ってもらえると幸いです。

確認環境

  • Vagrant 1.7.4
  • VirtualBox 5.0.0

使い方

$ bundle install
$ vagrant plugin install vagrant-properties
$ vi roles/ldap.json #公開鍵を設定してください
$ vagrant up
$ ssh 192.168.70.11 -l test

ひと通りの動作が確認できると重います。
特徴としては下記のtemplateで定義されているdescriptionでログイン可能サーバの制御を行っていて、
pyamaユーザーはmuuサービスlolipopサービスにログインできるが、その他はできないという
ような制御を可能にしています。

LDAPの登録内容

cookbooks/ldap/templates/default/auth.ldif.erb

dn: uid=pyama,ou=ssh,dc=pepabo,dc=com
objectClass: shadowAccount
objectClass: posixAccount
userPassword: test
description: muu
description: lolipop
sshPublicKey: ssh flkjdaldjsflasjdflajdalfkjs

ログインされるサーバの設定内容

cookbooks/client/templates/default/nslcd.conf.erb

uid nslcd
gid ldap
uri ldap://192.168.70.10/
base ou=ssh,dc=dummy,dc=com 
ssl no
tls_cacertdir /etc/openldap/cacerts
filter passwd (description=muu) # このサーバにはdescription=muuを持つユーザーだけがログインできる
filter shadow (description=muu)
filter group  (objectClass=posixGroup)

tips

通常ではLDAPに公開鍵を登録することはできないので、こちらを参考に該当のリソースを追加するldifを作成し登録してたりします。

久しぶりにLDAP触って疲れた・・・