我的公司已禁用 SSH 公钥身份验证,因此我每次都必须手动输入密码(我不打算更改/etc/ssh/sshd_config
)。
但是gssapi-keyex
,gssapi-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)
kinit [email protected]
pam_krb5
理想情况下,这是由您的标准登录过程通过pam_sss
在auth_provider = krb5
适当的pam stack
.
kvno host/[email protected]
- 这是一个调试步骤。如果您有一个有效的缓存并且您正在与支持或 的对象
ssh
对话,则会自动执行此操作。sshd
gssapi-with-mic
gssapi-keyex
- 这是一个调试步骤。如果您有一个有效的缓存并且您正在与支持或 的对象
dig _kerberos.example.com txt
应该返回"EXAMPLE.COM"
- 或者,映射可以存储在as
[domain_realm]
的部分中,但该方法的扩展性更好。/etc/krb5.conf
.example.com = EXAMPLE.COM
dns
- 或者,映射可以存储在as
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,并且它们的语法不同。阅读相关系统的联机帮助页会有所帮助。