ssh ldap AuthorizedKeys命令

ssh ldap AuthorizedKeys命令

我已经安装了 LDAP 服务器,我为我的用户生成了证书,并且我想将证书存储在 ldap 中(证书本身,而不是它们的目录),我发现以下方案用于存储公钥,因此我将方案和相应的用户公钥添加到 LDAP 服务器。

# octetString SYNTAX
attributetype ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey'
DESC 'MANDATORY: OpenSSH Public key'
EQUALITY octetStringMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )

# printableString SYNTAX yes|no
objectclass ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY
DESC 'MANDATORY: OpenSSH LPK objectclass'
MAY ( sshPublicKey $ uid )
)

我研究了使用 ssh 使用公钥和私钥连接到服务器,我发现对于 ssh 读取 LDAP 服务器的公钥需要一个 AuthorizedKeysCommand 命令和一个负责寻找公钥并将其提供给 LDAP 的脚本,找到了这个脚本来寻找公钥 ldap

#!/bin/bash
cn=$usuario
server=servus2.inf #Put your server IP
basedn=ou=usuarios,dc=servus2,dc=inf #Put your basedn
port=389
ldapsearch -x -h $server -p $port -b $basedn -s sub"(objectclass=posixAccount)(uid=$cn)" | sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp'

我把它放在文件夹中/etc/ssh,并授予所有用户执行权限,还授予权限管理器写入和读取权限,完成后我在文件/etc/ssh/sshd_config行中添加:

AuthorizedKeysCommand /etc/ssh/script.sh

我意识到这条线是PubkeyAuthentication yes这样的,所以一旦配置完成,我就重新启动 ssh 服务器。从客户端尝试通过 ssh 连接到服务器,如下所示:

ssh -i claveprivada [email protected]

但没有什么能让我跟着我,我问了密码,添加了-vvv查看正在发生的详细信息的选项,但没有告诉我任何具体信息。我认为不是在读取AuthorizedKeysCommand不随时出现的行。我查看了日志,没有收到有关该行或脚本的错误,所以我认为这是忽略了该行。

我查了一下相关信息,发现之前的版本有个bug,不知道现在解决了没有,但是我升级到了Ubuntu 16.04的OpenSSH 7.1p2版本,还是一样没用。

有谁知道如何解决这个问题?

答案1

我尝试获取某个尝试使用 ssh 登录的用户的公钥。(该用户的公钥存储在 LDAP 服务器中)。以下配置对我有用。

/etc/ssh/sshd_config

AuthorizedKeysCommand /usr/bin/auth
AuthorizedKeysCommandUser nobody

以用户id(名称)作为输入的脚本如下。

cn=$1
server=192.168.57.105 #Put your server IP
basedn=ou=users,dc=myorg,dc=org #Put your basedn
port=389

ldapsearch -x -h $server -p $port -o ldif-wrap=no  -b $basedn -s sub "(&(objectClass=posixAccount)(uid=$cn))" | sed -n 's/^[ \t]*sshPublicKey:[ \t]*\(.*\)/\1/p'

相关内容