環境:Ubuntu 14.04および16.04サーバー、Windows Server 2016上のActive Directory、Ubuntu 14.04および16.04クライアント。 Ubuntuサーバーとクライアントはドメインにありません。
みなさん、こんにちは、
Sshのldap認証を実現するすべての方法で少し迷っています。しかし、私は私に適したものを見つけることができません。
私の願い:「sAMAccount @ serverIP」でログインしてサーバーに接続したくないので、SSHキーはADに保存されます(新しいフィールドはodiSSHPubKeysとして追加されます)。私のサーバーはAD(ldapsearchクエリ)とうまく通信します。私はsshdconfigを更新することでそれを達成しました:
/ etc/ssh/sshd_config
AuthorizedKeysCommand /usr/bin/auth
AuthorizedKeysCommandUser root
/ usr/bin/auth
#!/bin/bash
cn=$1
server=ldap.myad.net #Put your server IP
basedn=dc=mydomain,dc=net #Put your basedn
port=389
bindUser=myBindUser
bindPass=myBindUserPassword
#cn=mathieu
ldapsearch -LLL -o ldif-wrap=no -x -h $server -p $port -b $basedn -D $bindUser -w $bindPass -s sub "(sAMAccountName=$cn)" | sed -n 's/^[ \t]*odiSSHPubKeys:[ \t]*\(.*\)/\1/p'
[email protected]に接続すると、preauthに蹴られます
/ var/log/auth.log
Apr 18 11:56:26 MLL-HV-UBU-16 sshd[9103]: Invalid user mathieu from 192.168.0.114
Apr 18 11:56:26 MLL-HV-UBU-16 sshd[9103]: input_userauth_request: invalid user mathieu [preauth]
Apr 18 11:56:26 MLL-HV-UBU-16 sshd[9103]: Connection closed by 192.168.0.114 port 50152 [preauth]
だから私の問題は、「mathieu」がUbuntuサーバーにユーザーとして存在しないということです。私は自分のcnを/ usr/bin/authに強制し、rootアカウント([email protected])でログに記録しようとします。
事前認証チェックを無効にしてldapを機能させるにはどうすればよいですか?
PS:ログイン/パスワード認証は必要ありません(このソリューションには、たくさんのtutoがありますが、sshキーや古いものには多くありません)。
ご協力いただきありがとうございます
ここでの最適なオプションは、この目的のためにsssdを使用することです。 AltSecurityIdentitiesを使用してキーを保存し、realmdを使用してサーバーをドメインに参加させます。
ドメインが参加したら、次を[domain /]セクションの下の/etc/sssd/sssd.confファイルに追加します。
ldap_user_extra_attrs = altSecurityIdentities:altSecurityIdentities
ldap_user_ssh_public_key = altSecurityIdentities
ldap_use_tokengroups = True
[sssd]セクションの下に以下を追加します。
services = nss、pam、sudo、ssh
次に、/ etc/ssh/sshd_configに以下を追加します。
AuthorizedKeysCommand/usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUserルート
両方のサービスを再起動すると、ADのAltSecurityIdentities拡張属性に保存されているADユーザー名とパスワードを使用してログインできるはずです。