48
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenSSH 6.2を使って公開鍵認証もLDAPで行いたい。

Posted at

公開鍵認証もLDAPで行いたい。LDAPを使うと各サーバの認証情報を一元管理できるけど、公開鍵認証を行ってる場合、公開鍵も一元管理できると便利だ。OpenSSHはLDAPに対応していないので、OpenSSH-LPKというパッチを当てて対応する必要があるんだけど、OpenSSH 6.2からはパッチを当てなくても良くなったと聞いてやってみることにした。

Wheezy-backportsからDebian WheezyにOpenSSH 6.4を入れる

Debian WheezyのOpenSSHは6.0なので、Wheezy-backportsからインストールする。

$ sudo echo "deb http://ftp.jp.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list
$ sudo aptitude update
$ sudo aptitude install -t wheezy-backports openssh-server

AuthorizedKeysCommandを使う

AuthorizedKeysCommandにコマンドを指定することで、コマンドの実行結果をOpenSSHに公開鍵として渡すことができる。設定は次の様な感じ。

/etc/ssh/sshd_config
AuthorizedKeysCommand /usr/lib/ssh-command/find_key.sh
AuthorizedKeysCommandUser root

AuthorizedKeysCommandに指定するコマンドのパスには制限があり、root以外が書き込み権限のあるディレクトリなどに置かれているとエラーになる。

LDAPから公開鍵を取得する

AuthorizedKeysCommandを使ってLDAPサーバから鍵を取得する簡単なシェルスクリプトを書いた。sedだけでがんばろうとしたけどあきらめてRubyを使った。LDAPのパスワードはlibnss-ldap.secretに書いているものを使っている。

/usr/lib/ssh-command/find_key.sh
#!/bin/bash

uri=ldap://10.0.XXX.XXX/
binddn="cn=admin,dc=harukasan,dc=jp"
bindpw=$(cat /etc/libnss-ldap.secret)
base="dc=harukasan,dc=jp"
uid=$1

ldapsearch -LLL -H ${uri} -w "${bindpw}" -D "${binddn}" -b "${base}" "(& (objectClass=posixAccount) (uid=${uid}))" "sshPublicKey" | ruby -e 'puts STDIN.read.gsub(/\n /,"").match(/sshPublicKey: (.+)/).to_a[1]'

まとめ

OpenSSH 6.2のAuthorizedKeysCommandを使うと簡単に公開鍵を他のプロダクトから扱えて便利だ。こんなことよりもLDAPにスキーマを追加する方が大変だったんだけど、疲れたのでまた別の機会にしたい。別にLDAPに限らずRDBだったり外部サービスだったりいろんなものをバックエンドに使えると思う。

48
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?