黒川温泉産の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触って疲れた・・・