我想设置一个堡垒(ssh jumphost)来访问防火墙后面的网络。两台服务器都在 freeIPA 域中。客户端是用户机器,不属于 IPA 域。
Internet/客户端 —> SSH-Jumphost —> 登录节点
我的计划是通过凭证登录 ssh-jumphost 以获取有效的 TGT,然后通过获取的 kerberos 票证通过 ssh 连接到登录服务器。
因此,我更改了 ssh 和 sshd 配置,以允许转发 GSSAPI-Credentials。
# IPA-related configuration changes to sshd_config
PubkeyAuthentication yes
KerberosAuthentication no
GSSAPIAuthentication yes
UsePAM yes
ChallengeResponseAuthentication yes
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody
# added
PasswordAuthentication no
以及 ssh 配置:
# IPA-related configuration changes to ssh_config
#
PubkeyAuthentication yes
GlobalKnownHostsFile /var/lib/sss/pubconf/known_hosts
#VerifyHostKeyDNS yes
# assumes that if a user does not have shell (/sbin/nologin),
# this will return nonzero exit code and proxy command will be ignored
Match exec true
ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h
#added
GSSAPIAuthentication yes
GSSAPITrustDns yes
GSSAPIKeyExchange yes
GSSAPIRenewalForcesRekey yes
Host login
GSSAPIDelegateCredentials yes
如果我使用 ssh 登录到 jumphost,我会收到有效的 kerberos 票证。之后,我无需输入凭据即可 ssh 登录
$(j@client) ssh jumphost
(USER@jumphost) password:
$(@jumphost) klist
Credential-Cache: KCM:1791600003:19884
Standard-Principal: user@REALM
Valid starting Expires Service principal
22.11.2022 17:45:38 23.11.2022 17:35:51 krbtgt/REALM@REALM
$(@jumphost) ssh login
$(@login) klist
Credential-Cache: KCM:1791600003:66779
Standard-Principal: user@REALM
Valid starting Expires Service principal
22.11.2022 17:47:51 23.11.2022 17:35:51 krbtgt/REALM@REALM
但如果我尝试一步完成此操作,则需要为每个服务器输入我的凭据:
$(@client) ssh -J jumphost login
(user@jumphost) Password:
(user@login) Password:
之后我登录并获得了有效的 TGT,但我不知道为什么需要输入两次密码。
我只想被强制输入一次密码。
我也在客户端上使用不同的 ssh 配置尝试了此操作。
Host login
User USER
#GSSAPIAuthentication yes
#GSSAPIDelegateCredentials yes
HostName login
ProxyJump USER@jumphost
带有和不带有 GSSAPI 选项。
Host jumphost
User USER
HostName jumphost
Host login
User USER
#GSSAPIAuthentication yes
#GSSAPIDelegateCredentials yes
HostName login
ProxyJump jumphost
带有和不带有 GSSAPI 选项。
所有版本都导致我需要提供两次密码的情况。
我错过了什么?
编辑:添加了 krb5.conf
#File modified by ipa-client-install
includedir /etc/krb5.conf.d/
includedir /var/lib/sss/pubconf/krb5.include.d/
[libdefaults]
default_realm = RELAM
dns_lookup_realm = true
rdns = false
dns_canonicalize_hostname = false
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = true
udp_preference_limit = 0
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
REALM = {
pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
}
[domain_realm]
.realm.com = REALM
realm.com = REALM
jumphost.realm.com = REALM
/etc/krb5.conf.d下有以下文件
crypto-policies freeipa kcm_default_ccache sssd_enable_idp
答案1
编辑我想我错了:-)
SSH 设置对我来说没问题。我猜发出的票是不可转发的。
Libdefaults 部分
[...]
可转发
如果设置了此标志,则默认情况下初始票证将是可转发的。此标志的默认值为 false。
答案2
我认为您误解了 ssh 的 -J 选项的作用。它使用跳转主机创建到最终目的地的套接字连接以代理连接,但与最终目的地协商密钥和身份验证的仍然是原始主机。您可能更幸运的是,使用以下方法:
ssh -t jumphost 'ssh -t login'