Windows openssh でKerberos認証。 ssh Kerberos authentication on samba 4 ad-dc and windows server 2022 openssh server.

はじめに

Windows server 2022, windows 11, Windows 10 xxxx から、OpenSSH Server で、Kerberos Authenticationがサポートされた。そこで、それらでのKerberos passwordless Authentication settings を下記に示す。

環境

  1. Active Directory Domain controller : Samba4.15 on Ubuntu 22.04 / 以後dc

  2. Domain member server and openssh server: Windows server 2022 / 以後ws(windows server)

  3. Domain member server: Ubuntu 22.04 / 以後us(ubuntu server)

  4. Non domain member server : Centos 7.9 / 以後 cs(centos server)

目標
Ubuntu, centos からWindows opensshd にkerberos passwordless Loginする。

メリット

ssh password less login 方法には、kerberos.以外にpublickey 方式がある。public key 方式でwindows opensshd にpasswoed less login した場合、そのSessionにはAD credentialが保持されない。その為、invoke-command cmdlet 等によるremote Access時にパスワード入力等の認証が必要になる。
一方、kerberos password less authentication では、そのSession にAD credentialが保持され、その後のリモートアクセスにもPassword less が可能となる。

作業概要

作業は3 steps. DC, WS, US/CS の各サーバで作業する。

  1. dc: keytab作成

  2. ws: opensshd install & settings &keytab copy

  3. us,cs: kerberos install, keytab copy & kinit & try ssh

作業詳細

  1. DC でkeytab 作成。sudo samba-tool domain exportkeytab <KEYTABNAME> -p <SPN>で出力する。各サービスプリンシパル/SPNのkeytab をexport する。

  2. WSでopenssh install & settings. install は別途とし、その後c:\programdata\sshに DCで作成したkeytab file をコピーし、下記の通り、sshd_config を編集する。"GSSAPIAuthntication yes "を設定する。defaultではコメントアウトされているので、外し、no -> yesに変更. その後、restaet-service sshd 

  3. 最後の設定、ssh client 設定。krberos install は別途。krb5.conf を設定したら、dc で作成したkeytab を/etc/krb5.keytab にmerge. 元からなければコピー。ssh client のuser name で、kinit <username>. kinit でエラーがなければ、klist でtgt 取得を確認する。その後、.ssh/config に、GSSAPIAuthentication yes, GSSAPIDelegateCredentials yes を設定する。前記で設定したhost =ws に対してssh. pw less かつ、login したws から、更に別のマシンにinvoke-command -computer <REMOTE> {echo "wow"} がpw less で動作すれば完了。問題があれば、Troubleshootへ。


Trouble shoot

  1. kinit で、profile が見つからないエラーが出る。/etc/krb5.conf.d/ ディレクトリがないか、読み込み許可がない。

  2. ssh 実行時にkerberos auth に失敗する。.ssh/config に記載したUser parameterの domain\user 書式で、domain\\user のように2つのbackslash を誤って使用した。ssh client config 内のhostname parameterのbackslash は一つで良い。

  3. public key auth でlogin してしまう。PreferredAuthentifications の記載順が間違っている。gss*-micを先頭に記述する。

  4. open sshd 用のspnを作成しようとすると重複エラーになる。Samba 4 AD DC環境では、各メンバーサーバのhost/host.domain のspn は自動で作成されている模様で、新規作成しようとすると重複エラーになる。

  5. ssh client 用のupn を作成しようとしても前記同様、重複エラーとなる。AD user 作成時に、自動でupnが作成されている模様。既存在のAD user なら、新規upn 作成は不要、かつ、upn だけを作る必要もなく、ad user を作成するだけで足りる。

確認結果

  1. Linux →Win、問題なくpasswird less でloginできた。ここでのLinuxは、ubuntu 22.04, CentOS 7.9. WindowsはWindows server 2022. sshd はopenssh server.

  2. Win→  Win, windows ssh client 用に、$HOME/.ssh/config にGSSAPI* を設定してやると問題なくpassword less login ok. Invoke-command, enter-pssesseion 系はad credential なので、そちらは問題なくpassword less.

  3.  Win →Linux , これは Kerberos で認証したか、pubkey で認証したか識別方法を確認中。

  4. Linux →Linux , 未着手

不明点or未検証

  1. 今回はdc でkeytab を作成し、ws, us, cs に展開したが、この作業の必要性が不明。krb5.conf に、kdc のfqdn が設定されており、kinit の際にkdcからtgt を取得すれば、keytab をdc.から*s に転送する必要ないのでは?

  2. 今回はwindows server 2022で検証したが、Windows 11, Windows 10 xxxx では未検証のため、Client os でのopensshd の結果等は不明。

  3. 今回はwindows opensshd の確認目的だった為、Windows ssh client からlinux sshd.へのkerberos pw less auth は未検証。

課題等

Windows sshd にLinux からlogin する時に、kinit でキャッシュしたTGTチケットが期限切れの場合、Kerberos認証が失敗し、fallback でpubkey 認証する。TGTの期限はdefaultで24hであり、現実では毎日作業開始時に期限切れになっている。Pubkey 認証ではそのsession内ではAD credenrial を保持しないため、そのsessionから別のホストにremote accessに失敗しpubkey認証したと気付く。その為、その日の最初にkinit するが、pwが必要で、これがそれなりにストレス. Terminal soft 側で何とかできないかを検討するが、ここではオフトピック。






参考


この記事が気に入ったらサポートをしてみませんか?