我的工作站和我需要的终端之间有两个很好的中间主机。我试图使用 ProxyJump 配置来建立此连接,但似乎不起作用。
拓扑:
ssh ssh ssh
localhost.domain1.com --> h1.domain1.com --> h2.domain2.com --> dest.domain2.com
当我尝试使用下面的命令时,我收到一个错误
ssh -K -J h1.domain1.com,h2.domain2.com dest.domain2.com
它连接到 h1.domain1.com,但无法正确连接到 h2.domain2.com,无法“联系领域‘domain2.com’的任何 KDC(并且我在 domain2.com 上没有密码,所以这不是一个选择)”:
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /home/USERNAME/.ssh/config
...
debug1: Setting implicit ProxyCommand from ProxyJump: ssh -J h1.domain1.com -v -W %h:%p h2.domain2.com
debug1: Executing proxy command: exec ssh -J h1.domain1.com -v -W dest.domain2.com:22 h2.domain2.com
...
debug1: Connecting to h1.domain1.com [132.175.108.33] port 22.
debug1: Connection established.
...
debug1: Authenticating to h1.domain1.com:22 as 'USERNAME'
...
debug1: Next authentication method: gssapi-with-mic
debug1: Authentication succeeded (gssapi-with-mic).
Authenticated to h1.domain1.com ([###.###.##.##]:22).
debug1: channel_connect_stdio_fwd h2.domain2.com:22
debug1: channel 0: new [stdio-forward]
debug1: getpeername failed: Bad file descriptor
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: pledge: network
...
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: Authenticating to h2.domain2.com:22 as 'USERNAME'
...
debug1: Next authentication method: gssapi-with-mic
debug1: getpeername failed: Socket operation on non-socket
debug1: Unspecified GSS failure. Minor code may provide more information
Cannot contact any KDC for realm 'domain2.com'
debug1: Authentications that can continue: gssapi-keyex,gssapi-with-mic,password,hostbased
debug1: Next authentication method: password
以下命令确实有效,但是该网站表明它可能不安全:
ssh -K -tt h1.domain1.com ssh -K -tt h2.domain2.com ssh -K -tt dest.domain2.com
我相信所有跨领域身份验证都已正确设置,因为一个命令确实有效。
顺便说一句,在 domain1.com 内,我都可以毫无问题地完成:ssh -K -J a.domain1.com,b.domain1.com c.domain.com
有没有办法让更短、更安全的 ProxyJump 在这种配置下与 Kerberos 一起工作?
答案1
跨域身份验证与您是否拥有其他域的密码无关。您的客户端必须联系域 2 的 KDC 以获取服务器那是在另一个领域。
跨领域身份验证的工作原理如下:
- Client@FOO 联系 kdc.foo.com,使用密码获取 krbtgt/FOO@FOO(初始 TGT)。
- Client@FOO 联系 kdc.foo.com,使用 krbtgt/FOO@FOO 获取 krbtgt/BAR@FOO。
- Client@FOO 联系 kdc.bar.org,使用 krbtgt/BAR@FOO 获取 host/host1.bar.org@BAR。
因此客户必须能够到达其自身领域和服务器领域的 KDC。
(理想情况下,为了避免手动krb5.conf
配置,每个领域应该只具有 SRV 记录_kerberos._udp
并_kerberos._tcp
指向正确的 KDC。)
ProxyJump 不会以任何方式影响这一点。它建立一个隧道,以便所有客户端逻辑仍在您的计算机上运行。因此 Kerberos 的工作方式与您直接 ssh 到最终服务器完全相同。