Kerberos導入からSSH GSSAPI認証成功までの記録
🛠️ 目的
Kerberosを使って、SSHログインを公開鍵なしでGSSAPI認証(SSO風)で通す構成を目指した。sudoもチケットで通す構想だったが、そこには別途PAM連携が必要で今回は見送り。
📌 環境構成
- KDCサーバ:
kdc.starf.local - クライアント(SSH発行元):
sgt.starf.local - SSHサーバ(ログイン先):
starf.starf.local - ドメイン:
STARF.LOCAL - ユーザー:
user
1️⃣ Kerberosの基本設定
サーバ側(KDC)
/etc/krb5.conf の設定
[kdc]
profile = /etc/krb5kdc/kdc.conf
kadminでプリンシパル追加:
addprinc host/starf.STARF.LOCAL
addprinc -randkey host/starf.STARF.LOCAL
ktadd host/starf.STARF.LOCAL
クライアント側(sgt)
チケット取得確認:
kinit user
klist
2️⃣ SSH側の設定
sshd_config(starf側)
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
UsePAM yes
ssh_config(クライアント側)
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
3️⃣ hostプリンシパルとkeytabの迷走
keytabを /etc/krb5.keytab に書き込むも、プリンシパルの綴り(starF vs starf)、ホスト名(FQDN)、KVNOの不整合などで、以下のようにカオス状態に。
klist -k /etc/krb5.keytab
2 host/starf.STARF.LOCAL@STARF.LOCAL
2 host/starF.STARF.LOCAL@STARF.LOCAL
2 host/starf.starf.local@STARF.LOCAL
1 host/starf.STARF.LOCAL@STARF.LOCAL
対応策
- hostname -f が
starF.starF.localとなっており、Kerberosに登録されたプリンシパルと一致しない - FQDN(小文字/大文字)とkrb5.keytab中のプリンシパルが不一致 → すべて統一した
- 正しいKVNOだけを残すため、
ktutilでkeytabを手動編集
4️⃣ 認証エラーとその原因
ログの抜粋:
Unspecified GSS failure. Minor code may provide more information
Key version is not available
→ 原因は keytab にあるプリンシパルの KVNO がチケットと一致していなかった。
再度 ktutil にて正しいプリンシパルだけを addent → wkt で保存し、チケット取得と照合。
5️⃣ 成功の瞬間
ついに以下の出力が得られた:
debug1: Next authentication method: gssapi-with-mic
Authenticated to starf ([192.168.11.8]:22) using "gssapi-with-mic"
klist 結果(GSS認証後)
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: user@STARF.LOCAL
Valid starting Expires Service principal
2025-07-19T00:30:39 2025-07-19T15:31:39 krbtgt/STARF.LOCAL@STARF.LOCAL
2025-07-19T00:32:01 2025-07-19T15:31:39 host/starf.starf.local@STARF.LOCAL
✅ まとめ
- プリンシパル名は FQDN、ドメイン名含めて正確に
- hostname -f と krb5.keytab のプリンシパル名は一致必須
- KVNO は
ktutil listとklistを使って整合性を取る - GSS認証時のエラーは、keytabのKVNO不整合が多い
sudoのチケット連携はpam_krb5が必要(今回は未導入)
以上で、Kerberos + SSH(GSSAPI)環境は完成。SSO風ログインが可能になった。

