guest@gitkeniwo.github.io: ~
~> glow -p 2025-03-17-kerberos-setup.md

为你的WSL和HPC Container设置Kerberos

WTH is Kerberos

tl;dr: MSSQL Server uses windows integrated authentication that only works on your shitty company window PC. If you wanna use that PC to grant authentication to your 1)WSL or 2)Remote Linux Server, you gotta use Kerberos.

为WSL设置Kerberos

公司电脑用的是windows integrated authentication来连接MS SQL server, 这时WSL内的odbc driver没有credential就连不上了,需要给WSL设置Kerberos来连接.

首先确认自己的AD域. 使用垃圾无比的Windows COMMAND PROMPT

C:\Users\xiaohan.wang>systeminfo | findstr /B "Domain"
Domain:                    marel.net

C:\Users\xiaohan.wang>set user
USERDNSDOMAIN=MAREL.NET
USERDOMAIN=MAREL
USERDOMAIN_ROAMINGPROFILE=MAREL
USERNAME=xiaohan.wang
USERPROFILE=C:\Users\xiaohan.wang

按照教程来,给WSL安装krb5-user client

# install krb5-user
sudo apt install krb5-user

这个krb5-user需要配置/etc/krb5.conf. 一般来说linux上的/etc/都要用 sudo vim/nvim 编辑

[libdefaults]

default_realm = ad.example.net
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
rdns = true
forwardable = yes

配置好后,接下来使用 kinit即可issue kerberos ticket。

注意,一般来说,这需要你WSL的username与公司windows的用户名相同。我的之前就差了一个.(username.familyname),所以我root进了ubuntu迁移了用户名。用户名匹配的话kinit就会提示你输入你windows用户的密码,之后就能用klist看到你的kerberos ticket了。

为HPC/Remote Linux Server设置Kerberos

前面到配置/etc/krb5.conf都大概相同。注意 /etc/krb5.conf 文件会稍显不同,可以直接找公司的IT要一份。

配置好/etc/krb5.conf后,如果你在公司服务器上,这时有可能你的container默认用户名只能是ubuntu之类的。
你此时就该用kinit username@MAREL.NET,直接指定你的username来发行Kerberos ticket。
此外还可以自己加flag定义ticket有效期,tldr kerberos 一下自行学习.

issue了ticket之后,用klist展示当前ticket。

自动发行Kerberos ticket

原帖还建议在.bashrc放一段脚本每次login自动更新kerberos ticket

# Always renew Kerberos creds at login
if [ -f "/tmp/krb5cc_$(id -u)" ]; then
    kinit -R
fi
(END)
~>