![使用 kerberos 进行 Ubuntu SSH 无密码登录](https://linux22.com/image/698087/%E4%BD%BF%E7%94%A8%20kerberos%20%E8%BF%9B%E8%A1%8C%20Ubuntu%20SSH%20%E6%97%A0%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95.png)
这让我很抓狂。我正在尝试设置一个集成了 AD 的 Ubuntu 16.04 服务器,以便在通过 SSH 登录时接受 Kerberos 票证。我有一台 CentOS 7 服务器,在加入 AD 域后可以毫无问题地接受票证,但我还没有在 Ubuntu 服务器上正确配置。
设置如下:
- Windows 2012 AD 域(realdomain.tld)
- Fedora 25 工作站(wksf25.realdomain.tld)
- CentOS 7 服务器(sc7.realdomain.tld)
- Ubuntu 16.04 服务器(su16.realdomain.tld)
所有内容都通过领域加入到 AD,并且运行正常。所有内容在登录时或通过 kinit 时也都能获得 Kerberos 票证。从 wksf25 到 sc7 的 SSH 运行正常,我能够使用登录 wkfs25 时获得的 kerberos 票证通过 SSH 登录。
以下是 Ubuntu 的设置步骤:
安装软件包:
apt install realmd oddjob oddjob-mkhomedir sssd sssd-tools adcli samba-common krb5-user chrony packagekit libpam-krb5
- 编辑
chrony.conf
以使用 AD DC。 设置 realmd.conf:
vim /etc/realmd.conf
[users] default-home = /home/%D/%U [realdomain.tld] fully-qualified-names = no manage-system = no automatic-id-mapping = yes
加入域:
realm join -vU domainuser realdomain.tld
- 允许登录:
realm permit -R realdomain.tld -g linuxadmins
Ubuntu 专用 - 设置 pam 在登录时创建主目录:`vim /etc/pam.d/common-session'
session optional pam_mkhomedir.so umask=0077
Ubuntu 特定 - 在 OpenSSH 中启用 GSSAPI 身份验证:
vim /etc/ssh/sshd_config
GSSAPIAuthentiction yes GSSAPICleanupCredentials no
使用域帐户登录并确保一切正常。此时,除了通过 Ubuntu 服务器上的 Kerberos 票证进行无密码 SSH 登录外,一切正常。
以下是我得到的信息realm list
:
realdomain.tld
type: kerberos
realm-name: REALDOMAIN.TLD
domain-name: realdomain.tld
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
login-formats: %U
login-policy: allow-permitted-logins
permitted-logins:
permitted-groups: linuxusers
sssd.conf:
[sssd]
domains = realdomain.tld
config_file_version = 2
services = nss, pam
[domain/realdomain.tld]
ad_domain = realdomain.tld
krb5_realm = REALDOAMIN.TLD
realmd_tags = joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%d/%u
access_provider = simple
simple_allow_groups = linuxusers
krb5.conf:
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_ccache_name = KEYRING:persistent:%{uid}
default_realm = REALDOMAIN.TLD
[realms]
REALDOMAIN.TLD = {
}
[domain_realm]
realdomain.org = REALDOMAIN.TLD
.realdomain.org = REALDOMAIN.TLD
我错过了什么?
答案1
已修复。realm join -vU domainuser --membership-software=samba --client-software=sssd realdomain.tld
加入 Ubuntu 上的 AD 域而不是realm
使用默认值。
SSSD 配置中有一个小小的差异,我认为这并不重要,但事实证明它是重要的。
乌本图:realmd_tags = joined-with-adcli
CentOS:realmd_tags = joined-with-samba
为了从不同的角度看待这个问题,我启动了一台 OpenSUSE VM,并开始研究 SUSE 如何进行 AD 集成。当我弄清楚 SUSE 是如何工作的时,我偶然发现了一篇文章,其中建议应该使用 Samba 而不是 来加入 Windows Server 2012+ AD adcli
。1将其添加到上面配置的差异中,这就是正在发生的事情的线索。
离开域并使用更新的realm
命令重新加入解决了该问题,并且最后一天一切都很稳定。
我不知道这两种方法之间的差异的确切根本原因,但这需要更多的研究,并且是另一天的斗争。
答案2
我们在添加 SSL 证书以支持 LDAPS 时也遇到了类似的情况(尽管我从未恢复该更改以确定它是否是因果关系)。我不确定是否有任何理由更喜欢,但我发现在使用时有adcli
两个选项已修复(在 Ubuntu 14.04 和 16.04 上):realm join
adcli
解决方案 1(Ubuntu 16.04 或 14.04)
添加两个设置krb5.conf
(单独使用都没有帮助):
[libdefaults]
...
canonicalize = true
rdns = false
解决方案 2(仅限 Ubuntu 14.04)
后来我偶然发现这git 问题建议了另一个选项,该选项(单独)在 14.04 上也适用于我们:
[libdefaults]
...
dns_canonicalize_hostname = false
仅供参考
我们实际上完全控制我们的 DNS,并且无法在现有记录中发现任何问题 - 或者任何消除这些问题需要的更改。