やりたいこと
- SSH公開鍵をLDAPに登録して一元管理したいため調査しました。OpenSSHをソースからコンパイルしてとかいろいろ情報がありましたが、Ubuntu 14.04.1 LTSではOpenSSH 6.6.1p1がapt-getで入手できるのでスキーマファイルをダウンロードしてincludeするだけでした。
環境
- OS:Ubuntu 14.04.1 LTS
- OpenSSH:6.6.1p1
- OpenLDAP:2.4.31
LDAPサーバ側の設定
- まずLDAPサーバでの設定手順
1.OpenLdapサービス停止
sudo su -
service slapd stop
2.スキーマファイルをダウンロード
cd /usr/local/src
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/openssh-lpk/openssh-lpk_openldap.schema
3.スキーマディレクトリにコピー
mv openssh-lpk_openldap.schema /etc/ldap/schema
4.slapd.conf編集
vi /etc/ldap/slapd.conf
------------------------------------------------------------
include /etc/ldap/schema/openssh-lpk_openldap.schema
------------------------------------------------------------
5.ConfigDB削除
rm -rf /etc/ldap/slapd.d/*
6.ConfigDB再作成
slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/
chown -R openldap:openldap /etc/ldap/slapd.d
7.OpenLdapサービス起動
service slapd start
- これでLDAPのAttributeに「sshPublicKey」が表示され公開鍵が追加できる
LDAPクライアント側の設定
- sshdがLDAPサーバのSSH公開鍵を取得するようにする設定手順
1.LDAPサーバからSSH公開鍵を取得するスクリプト
- やっていることはLDAPサーバに接続して「ldapsearch」の結果から公開鍵だけ抽出
vi /opt/ssh-command/LdapGetSSHKey.sh
------------------------------------------------------------
#!/bin/bash
uri=ldap://<LDAP-SERVER>
binddn="<BIND-USER>"
bindpw=<PASSWORD>
base="<BASE>"
uid=$1
ldapsearch -LLL -H ${uri} -w "${bindpw}" -D "${binddn}" -b "${base}" "(& (objectClass=posixAccount) (uid=${uid}))" "sshPublicKey" | sed -ne '2,$p' | sed -e 's/sshPublicKey: //g' | sed -e 's/^ //g' | tr -d '\n'
------------------------------------------------------------
2.sshdに認証コマンドの設定
vi /etc/ssh/sshd_config
------------------------------------------------------------
AuthorizedKeysCommand /opt/ssh-command/LdapGetSSHKey.sh
AuthorizedKeysCommandUser root
------------------------------------------------------------
※参考