使用 gssapi-keyex 或 gssapi-with-mic 进行 SSH 身份验证(不允许使用 publickey)

使用 gssapi-keyex 或 gssapi-with-mic 进行 SSH 身份验证(不允许使用 publickey)

我的公司已禁用 SSH 公钥身份验证,因此我每次都必须手动输入密码(我不打算更改/etc/ssh/sshd_config)。

但是gssapi-keyexgssapi-with-mic身份验证已启用(请参阅下面的ssh调试输出)。

在这种情况下如何使用自动登录?
我可以利用gssapi-keyex和/或gssapi-with-mic身份验证吗?

> ssh -v -o PreferredAuthentications=publickey hostxx.domainxx
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to hostxx.domainxx [11.22.33.44] port 22.
debug1: Connection established.
debug1: identity file /home/me/.ssh/identity type -1
debug1: identity file /home/me/.ssh/id_rsa type -1
debug1: identity file /home/me/.ssh/id_dsa type 2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'hostxx.domainxx' is known and matches the RSA host key.
debug1: Found key in /home/me/.ssh/known_hosts:2
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: gssapi-keyex,gssapi-with-mic,password
debug1: No more authentication methods to try.
Permission denied (gssapi-keyex,gssapi-with-mic,password).

答案1

或许。

  • 您可以通过标准登录过程或手动(kinit适用于 Windows 的 MIT Kerberos)在客户端系统上获取委托人的票证吗?
  • 服务器是否有 kerberos 主体,或者您可以给它一个吗?它应该是这样的形式。host/[email protected]
  • GSSAPI您的客户端是否启用了身份验证?
  • 您的客户端是否通过 DNS TXT 资源记录或本地映射知道服务器属于哪个领域?

如果你说“是”全部以上,那么恭喜你,你可以使用GSSAPIAuthentication.

  • 您可能还需要启用凭据委派,具体取决于您的设置。

测试步骤:(
假设:domain = example.com ;realm = Examples.COM)

  1. kinit [email protected]
    • pam_krb5理想情况下,这是由您的标准登录过程通过pam_sssauth_provider = krb5适当的pam stack.
  2. kvno host/[email protected]
    • 这是一个调试步骤。如果您有一个有效的缓存并且您正在与支持或 的对象ssh对话,则会自动执行此操作。sshdgssapi-with-micgssapi-keyex
  3. dig _kerberos.example.com txt应该返回"EXAMPLE.COM"
    • 或者,映射可以存储在as[domain_realm]的部分中,但该方法的扩展性更好。/etc/krb5.conf.example.com = EXAMPLE.COMdns
  4. ssh -o GSSAPIAuthentication=yes [email protected]
    • 要登录服务器上除您的主体之外的用户名,您必须知道将其映射到此处,我不会在此详细介绍。

答案2

4 步方法是正确的(DNS 中还有更优雅的 Kerberos SRV 记录,并且存在于每个 Active Directory 中)。我一直使用这个,并且一直提倡使用上面的公钥方法,主要是出于安全和控制相关的原因。

也就是说,这仅提供交互式登录,尽管一旦您在工作站上获得了票证,它就可以是准交互式的。 Kerberos 票证的作用很像 SSH 代理;一旦您拥有它,新的连接是即时的并且无需密码;尽管有时间限制。

要获得交互式批量登录,您需要获取一个 keytab 文件,该文件本质上包含 Kerberos 帐户的密码,很像 SSH 密钥的私有部分。根据适用的安全预防措施;特别是因为密钥表未加密或使用密码保护。

我很不愿意为我的用户提供他们个人帐户的密钥表,但我积极使用具有最小权限的服务帐户来执行各种批处理作业,特别是在将凭据委托给远程系统至关重要的情况下,而 pubkey 可以做到这一点达到。

可以使用 Unix 上的 ktutil 或 Windows 上的 KTPASS.EXE(后者来自 AD Kerberos 服务)创建密钥表。请注意,ktutil 存在两种风格:Heimdal 和 MIT,并且它们的语法不同。阅读相关系统的联机帮助页会有所帮助。

相关内容