cloudpack磯辺です。

Linuxで、Active Direcotryを使った認証ができるようになったので、次はsshのシングルサインオン(SSO)をやってみた。

認証基盤の構成は、以前のエントリ RHEL7をActive Directory on Windows Server 2012 R2でユーザ認証させる (2)を参照のこと。

サーバの設定

sshdでGSSAPIを使うには、GSSAPIAuthenticationをyesにする。デフォルトでは有効になっているはず。
また、AuthenticationMethodsに、gssapi-keyex, gssapi-with-micを追加する。これまでの設定で、keyboard-interactiveのみになっていたので、追加すると、下記のようになる。

AuthenticationMethods gssapi-keyex gssapi-with-mic keyboard-interactive

設定が追記できたら、sshd -tで確認の上、sshdを再起動する。

DNSの設定

Linuxのホストの場合、Active Directoryに登録しただけでは自動的にDNSにレコードが登録されていない可能性がある。その場合は、GSSAPIを使った認証が失敗してしまう(Kerberosは名前がとても重要なのだ)。そのため、きちんと名前解決ができるようにDNSの設定をする。正引きだけでなく、逆引きについても登録が必要となる。

せっかくなので、PowerShellで登録してみた。

PS> Add-DnsServerResourceRecordA -ZoneName example.local -IPV4Address 10.0.128.195 -Name server01
PS> Add-DnsServerResourceRecordPtr -ZoneName 0.10.in-addr.arpa -Name 195.128 -PTRDomainName server01.example.local

クライアントの設定

今回の対象はOS X(10.9.5)とする。

コンピュータ名の変更

Active Directoryのドメインに参加させる必要があるので、その準備として、ホスト名を適切なものに変更する。

% sudo scutil --set HostName test01.example.local
% sudo hostname test01

ドメインへの参加

MacをActive Directoryのドメインに参加させる。

% dsconfigad -add example.local -username 

時間が掛かるので、少し待つ。問題なければなにも出力されないはず。
これで、ADのアカウントでMacにログインできるようになる。

ADアカウントでログイン

Macに対して、ADアカウントでログインした状態で、sshでサーバにログインする。
その際、GSSAPIAuthentication=yesを指定する(または、~/.ssh/configに設定を追記する)。

$ ssh -v -o GSSAPIAuthentication=yes isobe@server01.example.local
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to server01.example.local [10.0.128.195] port 22.
debug1: Connection established.
(snip)
debug1: Authentications that can continue: gssapi-keyex,gssapi-with-mic,keyboard-interactive
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Authentication succeeded (gssapi-with-mic).
Authenticated to server01.example.local ([10.0.128.195]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = ja_JP.UTF-8
Last login: Wed Oct 1 20:39:04 2014 from test01.iret.local
[isobe@server01 ~]$

GSSAPIを使ってログインしていることを示すため、-vオプションを付与して、debug1ログを出力している。”Authentication succeeded (gssapi-with-mic).”と出力されている通り、GSSAPIを使って認証が成功している。

これで、パスワードや公開鍵を使わずにログインすることができた。

ちなみに、GSSAPIが使えない場合は、前回までの設定のとおり、パスワードとワンタイムパスワードの認証が有効になる。

元記事はこちらです。
[Linux] sshでGSSAPIを使ったシングルサインオン(SSO)