Ruby active directoryにldap接続を行う

  • 作成日 2021.10.09
  • 更新日 2022.08.01
  • Ruby
Ruby active directoryにldap接続を行う

Rubyでactive directoryにldap接続を行うまでの手順を記述してます。Rubyのバージョンは3.0.0となります。

環境

  • OS CentOS 7.9.2009 (Core)
  • Ruby 3.0.0

net-ldap使用

net-ldapというライブラリを使用してLDAP接続を行います。

gemでインストールします。

gem install net-ldap

ldap接続

rubyから実行してみます。

ここでは「active directory」は以下の構成になっているものとしてます。

  • サーバー : 192.168.1.100
  • ドメイン : hoge.local
  • adminのパスワード : password
require "net/ldap"

ldap = Net::LDAP.new :host => "192.168.1.100",
                     :port => 389,
                     :auth => {
                       :method => :simple,
                       :username => "cn=administrator, dc=hoge, dc=local",
                       :password => "password",
                     }

if ldap.bind
  p "成功"
else
  p "失敗"
end

実行結果

成功

これで「bind」できたことが確認できます。

データを取得するには「search」を使用します。見やすくするため「pp」ライブラリを使用してます。
※ここでは、ouを「Keiri-OU」から取得してます。

require "net/ldap"
require "pp"

ldap = Net::LDAP.new :host => "192.168.1.100",
                     :port => 389,
                     :auth => {
                       :method => :simple,
                       :username => "cn=administrator, dc=hoge, dc=local",
                       :password => "password",
                     }

if ldap.bind
  p "成功"
else
  p "失敗"
end

groups = ldap.search(base: "ou=Keiri-OU,dc=hoge,dc=local")

pp groups

「filter」を使用することも可能です。

require "net/ldap"
require "pp"

ldap = Net::LDAP.new :host => "192.168.1.100",
                     :port => 389,
                     :auth => {
                       :method => :simple,
                       :username => "cn=administrator, dc=hoge, dc=local",
                       :password => "password",
                     }

if ldap.bind
  p "成功"
else
  p "失敗"
end

filter = Net::LDAP::Filter.eq("sAMAccountName", "ueda")
treebase = "ou=Keiri-OU,dc=hoge,dc=local"

ldap.search(:base => treebase, :filter => filter) do |entry|
  pp "DN: #{entry.dn}"
  entry.each do |attribute, values|
    pp attribute
    values.each do |value|
      pp value
    end
  end
end