<p>网上有一些博主写了通过keytab实现ssh免密的demo,krb5的工作原理不再细写,本文仅记录在具体实现时一些关键点。
讯享网
假设已经搭建好krb5 server。 请先理解以下概念 krb5“主体”:大致可以理解为它是用addprinc添加到数据库的记录。 ticket票据:通过krb5 server认证时,krb5颁发的票据。 krb5.keytab:krb5生成的密钥表文件,里面可以放多个“主体”。
通过krb5的密钥表文件krb5.keytab可以实现ssh免密,以想要免密登录机器:node-server-1为例,以下简称target_server,具体需要如下几点
1、在krb server上创建host主体
-q "addprinc -randkey host/node-server-1"
2、在krb server上将服务主体添加至密钥表文件
-q "ktadd -k /root/node-server-1.keytabhost/node-server-1"
3、将上一步生成.keytab文件,scp至target_server的/etc/krb5.keytab
krb5 client默认使用的密钥表文件为/etc/krb5.keytab,可以通过配置文件/etc/krb5.conf中 [libdefaults] 的 default_keytab_name配置项修改,如default_keytab_name = /etc/node-server-1.keytab
1、/etc/ssh/sshd_config GSSAPIAuthentication yes
2、/etc/ssh/ssh_configGSSAPIAuthentication yes
GSSAPIAuthentication该项必须设置为yes,允许通过GSSAPI认证
3、/etc/ssh/sshd_configGSSAPICleanupCredentials 可选
该项为是否在ssh断开时自动清空票据,可以考虑设置为yes
4、/etc/ssh/ssh_configGSSAPIDelegateCredentials yes
是否forward传递票据到下一级机器,默认为no,所以只可一级免密,如每一级SSH都开启该项,则可以无限跳来跳去(ssh A > ssh B > ssh C > ssh A)
只要当前ssh session里有了有效(未过期的)票据,(不论是用密码/kinit/forward传递得到的票据),都可以免密登录,直到票据过期或被删除
1、kerberos的host主体,仅支持主机名的形式,不支持IP地址(如 host/10.189.1.123),因为krb5 client会用dns去解析这个“主机名”。注:该“主机名”与机器的hostname无关,两者可不相同
2、可使用dns解析或设置/etc/hosts
1、必须先以账号密码的方式登录之后,才会获得krb ticket,才能使用GSS方式登录
2、使用rsa key的方式登录则无法获取ticket,即使可以通过kinit命令获取票据,但kinit仍然需要输入密码

1、生成单用户的密钥表文件
如:kadmin.local -q "ktadd -k /root/username1.keytab username1@your_krb_domain"
注意这一步会导致用户密码被重置,可以通过设置ktadd相关参数,不重置密码。
2、将生成的username1.keytab放于机器target_server上
3、kinit -ktusername1.keytab username1 即可免密获取到票据,原理类似你的账号密码已经被保存至该密钥表文件中。
4、由于此种方式有keytab文件泄露风险,拿到这个文件等价于知道了用户密码,不建议使用。
备注:
1、如用用户username1测试登录时,请勿通过su切换root,切换后就获取不到username1的票据缓存了。
2、ssh登录成功后,命令行直接输入klist命令查看当前的票据。输入kdestroy命令清空当前票据缓存,这一点在测试时较为有用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/199399.html