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


15

我的公司已禁用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
Python的结构在处理ssh自动化方面做得很好。
Dan Garthwaite

嗨@DanGarthwaite您是否使用Fabric手动登录到其他远程服务器?请您能解释一下如何使用它。请提供答案。干杯
olibre

3
如果您不在Kerberos领域(或Active Directory域)中,则GSSAPI不太可能对您有用。也就是说,禁用公共密钥身份验证似乎很荒谬。
迈克尔·汉普顿

1
@olibre Fabric是一种实用程序,可通过SSH在一个或多个服务器上运行命令。这些命令通常以“ fabfile”(如Makefile)的形式组织。它在使SSH消失(一旦进行身份验证)方面做得非常出色,并且可以处理SSH客户端和服务器倾向于中断控制的所有多种方式。提供了快速教程:docs.fabfile.org/en/1.7/tutorial.html
Dan Garthwaite

请@DanGarthwaite,能否举一个fab文件示例,该文件将登录到另一台计算机(SSH gssapi而不要求输入密码)并打开一个shell?您可以在答案中提供它。(五分钟之内,我没有在教程中找到该怎么做的方法)。干杯;)
olibre

Answers:


19

也许。

  • 您可以作为标准登录过程的一部分或手动(kinit对于Windows的MIT Kerberos)来获取客户端系统上主体的票证吗?
  • 服务器是否具有kerberos主体,或者您可以给它一个?它应该是形式host/server.example.com@EXAMPLE.COM
  • GSSAPI您的客户端上启用身份验证?
  • 您的客户端是否通过DNS TXT资源记录或本地映射知道服务器属于哪个领域?

如果您对以上所有内容说“是” ,那么恭喜您,可以使用GSSAPIAuthentication

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

测试步骤:(
假设:domain = example.com;领域= EXAMPLE.COM)

  1. kinit username@EXAMPLE.COM
    • 理想情况下,这是由您的标准登录过程处理的,只需在pam_krb5或中包含或pam_sss(带有auth_provider = krb5pam stack
  2. kvno host/server.example.com@EXAMPLE.COM
    • 这是调试步骤。ssh如果您有有效的缓存,并且正在与sshd支持gssapi-with-mic或的进行对话,则会自动执行此操作gssapi-keyex
  3. dig _kerberos.example.com txt 应该回来 "EXAMPLE.COM"
    • 或者,可以将映射存储在as 的[domain_realm]部分中,但是该方法的伸缩性更好。/etc/krb5.conf.example.com = EXAMPLE.COMdns
  4. ssh -o GSSAPIAuthentication=yes username@server.example.com
    • 要登录用户名而不是服务器上的用户名,必须知道要映射它的详细信息,我在这里不做介绍。

你好 我前段时间给过您+1,但实际上,我不知道如何检查您的四点。(我不是管理员,而只是开发人员)。请提供命令行以使用来检查SSH连接gssapiauthentication吗?也许我也可以gssapiauthentication在Linux机器上使用。(我应该使用kinit吗?)干杯;)
olibre 2013年

5

4步方法是正确的(DNS中也存在Kerberos SRV记录,这些记录更加精致,并且在每个Active Directory中都存在)。我一直使用它,并且出于安全和控制方面的原因,一直在上面的pubkey方法中提倡使用此方法。

就是说,这只会提供交互式登录,尽管一旦您在工作站上获得了票证就可以进行准交互式登录。Kerberos票证的行为与SSH代理非常相似。一旦有了它,新的连接即刻进行且无需密码;尽管有时间限制。

要进行交互式批量登录,您需要获取一个keytab文件,该文件实质上包含Kerberos帐户的密码,就像SSH密钥的私密部分一样。根据安全预防措施;尤其是因为keytab未被加密或没有密码保护。

我非常不愿意为我的用户提供其个人帐户的密钥标签,但是我正在积极地使用对各种批处理作业具有最小权限的服务帐户,尤其是在将凭据委派给远程系统非常重要的情况下(使用pubkey可以做到)不能实现。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.