我认为我对于自己想要实现的目标存在一些理解问题......
那么,让我们从当前的工作开始(所有描述的服务器都运行 CentOS 7):
- 包含用户公钥的 OpenLDAP 服务器
- 运行 OpenSSH 守护进程的“数据”服务器,允许用户使用私钥进行连接(使用 ssh 命令)
现在,我的最终目标是:
- gitolite 服务(在“数据”服务器上),从 OpenLDAP 服务器获取用户的公钥
(几个贡献脚本 - 查询基于 IPA 的 LDAP 服务器以获取组成员身份和用户密钥管理)
所以我认为可以实现我的愿望,但我不知道如何做......
我读过也可以查询 LDAP 服务器获取群组信息。所以我相信用公钥也能做同样的事情。
我浏览了很多链接,但找不到可以解决我的问题的东西...如果有人能给我一点提示,那就太好了:)
祝你今天过得愉快 !
附言:我只是想补充一点,我并不害怕阅读/编写大量代码。如果你的解决方案是使用 gitolite 以外的其他东西,那也不是问题,即使出于个人目的保留 gitolite 会更好。
编辑1:
目前的情况如下:
当我尝试使用此命令克隆默认的 testing.git 存储库时:
git clone ssh://git@dataserver/testing.git
使用以下内容〜/.ssh /配置:
host dataserver
hostname dataserver
Identityfile ~/.ssh/user
User git
我的终端告诉我这个:
Cloning in 'testing'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists
但是如果我在文件夹中有一个我的用户的公钥(user.pub)keydir
,那么一切都很好:
git clone ssh://git@dataserver/testing.git
Cloning in 'testing'...
Enter passphrase for key '/home/user/.ssh/user_rsa:
warning: it seems that you've cloned a bare repository.
Verifying connectivity... done.
git 存储库在这里:
ls -l | grep testing
drwxrwxr-x 3 user user 4096 mars 23 11:03 testing
编辑2:
我只是添加我的数据服务器如何查询 OpenLDAP 来获取用户的公钥(以防万一)。
在 /etc/ssh/sshd_config 文件中,输入:
AuthorizedKeysCommand /usr/bin/ssh-keyldaps %u
AuthorizedKeysCommandUser nobody
在 /usr/bin/ssh-keyldaps 中:
ldapsearch -H ldaps://ldapserver \
-b dc=my,dc=domain \
-x -LLL \
-o ldif-wrap=no \
"(&(uid=$uid)(sshPublicKey=*))" 'sshPublicKey' |
sed -n 's/^sshPublicKey:\s*\(.*\)$/\1/p'
我排除了一些行,因为它们在这里只是为了记录目的。
由于这个配置,所有在 LDAP 中注册的用户都可以sshPublicKey
通过他们的私钥登录数据服务器。
答案1
AuthorizedKeysCommand
您sshd_config
可能想看一下。文档片段读起来好像 gitolite 没有附带任何内容,而是依赖于外部因素。
sss_authorized_keys
例如,您可以设置 sssd 来针对 LDAP 服务器进行身份验证,然后使用。
文档应该容易被找到。