网上有一些博主写了通过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命令清空当前票据缓存,这一点在测试时较为有用。
到此这篇ssh免密登录配置sshd_config(ssh免密登录配置不生效)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/24314.html