古いOpenSSHだと、OpenSSH-LPKというパッチを当ててコンパイルすることでSSHとLDAPを連携していましたが、v6.2 からは AuthorizedKeysCommand という設定で連携できるようになりました。
それを使って SSSD と連携してみたり、ついでに nslcd でのおさらいもしておきます。
関連記事
SSSD+SSH+LDAPの設定
認証システムSSSD+LDAP+SUDOの構築手順 の通りにSSSDが構築済みとします。その内容で必要なポイントは以下2点です。
アンコメント or 追記します。
1 2 3 |
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys AuthorizedKeysCommandUser root #UsePAM yes |
再起動し、外のクライアントからSSH接続をしてみます。
1 2 |
systemctl restart sssd systemctl restart sshd |
失敗したら、sss_ssh_authorizedkeys example_user でLDAPの公開鍵を標準出力できているかの確認や、sshd, sssd のログを確認していけばよいです。
nslcdの場合
なんとなくnslcdの場合もメモを残しておきます。CentOS7
入れます。
1 |
yum install openssh-ldap |
sshd_config を設定します。
1 2 |
AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper AuthorizedKeysCommandUser root |
少々設定を追加して、sshを再起動したら完成です。
1 2 3 4 5 6 7 8 9 10 11 12 |
cat > /etc/ssh/ldap.conf <<__EOT__ uri ldap://ldap.example.com base dc=example,dc=com ssl no tls_cacertdir /etc/openldap/cacerts tls_cacertfile /etc/pki/tls/certs/ca-bundle.crt tls_checkpeer no __EOT__ chmod 600 /etc/ssh/ldap.conf systemctl restart sshd |
Debian8
入れます。
1 |
apt-get install ldap-utils |
CentOSのような ssh-ldap-wrapper が存在しないので、スクリプトを書きます。
スクリプト置き場のディレクトリ権限が決まっているので、こんな置き場にしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
mkdir -m0500 -p /root/sshd cat > /root/sshd/ldap-keys.sh <<'__EOT__' #!/bin/bash user="${1}" host="ldap://ldap.example.com" base="dc=example,dc=com" filter1="(& (objectClass=posixAccount) (uid=${user}))" filter2="sshPublicKey" id "$user" >/dev/null 2>&1 ldapsearch -x -LLL -H "$host" -b "$base" "$filter1" "$filter2" \ | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp' __EOT__ chmod 0500 /root/sshd/ldap-keys.sh # 公開鍵が標準出力されればOK /root/sshd/ldap-keys.sh example_user |
sshd_config を設定します。
1 2 |
AuthorizedKeysCommand /root/sshd/ldap-keys.sh AuthorizedKeysCommandUser root |
最後にsshを再起動して完成です。
こうしてみると、SSSDでの連携のほうが、だいぶスッキリしているようです。
ディストリビューションのメジャーバージョンが上がるたびに、この辺でイラついていたので、SSSDの息が長そうなら乗り換えるほうが良い気がしてきました。