WindowServerに対して、Serverspecを実行する際にドメイン認証を使いたくなると思うが、Serverspec-initで標準で出来るspec_helper.rbではベーシック認証のみしか受け付けてくれないので、下記のようにドメインユーザ指定するとwinrm認証でこけてテストが失敗する。。
user = "[ドメイン名]\ユーザ名"
pass = "パスワード"
標準でのwinrmの接続文字列
basic_auth_onlyを指定があるので他の認証は不可
winrm = ::WinRM::WinRMWebService.new(endpoint, :ssl, :user => user, :pass => pass, :basic_auth_only => true)
こう変更する
色々調べてみたんだけど、答えは簡単でwinrmのgemリポジトリの中に答えがあった。
basic_auth_onlyを外して、disable_sspiオプションを指定(無効化)する。
SSPIとは Windows認証をセキュアにする為のAPI
winrm = ::WinRM::WinRMWebService.new(endpoint, :ssl, :user => user, :pass => pass, :disable_sspi => true)
おまけ
各々のドメインユーザで認証するケースだと都度入力にしたいと思い、ドメインのID,passをハードコードするのはセキュリティ上もよろしくないので、こんな感じで対話式にして実行するとよい。
#ユーザ名・パスワード入力を都度入力に変更
puts "ユーザ名を入力して下さい sample:dc1\..."
user = STDIN.gets.chop
puts "パスワードを入力して下さい"
pass = STDIN.noecho(&:gets).chop
これでドメインユーザでの、Serverspecの実行が可能となる!!