I’m connecting to the windows machine where DB.Migrator.exe is via winrm authenticated through kerberos. Authentication works fine, because tasks before this are working perfectly (copy, remove file, other win_shell, unarchive, etc).
this DB.Migrator is a tool that uses my own credentials to connect to a remote MSSQL application listener via integrated security and then updates some data on that DB.
I’m hitting this error (returned by stdout of execution):
System.Data.SqlClient.SqlException (0x80131904): Login failed for user ‘NT AUTHORITY\ANONYMOUS LOGON’
It really depends on how the ‘DB.Migrator.exe’ binary is set to use credentials over a network path. If it’s trying to find a credential in the user’s DPAPI cred store then Kerberos with credential delegation is not enough to unlock it. Your options for this case are either:
Use become on the task with the connection user credentials
Use credssp as the transport
I would also suggest you use win_command and not win_shell for this task. The latter is only really useful if you want shell-isms, to run a binary win_command is usually enough for you. My personal preference here is to use become as that will do more than just fix credential delegation, it runs the task in a similar security context as to how it is run interactively.
I’ve done away with the set_fact task as it shouldn’t be needed
Used win_command instead of win_shell, the latter shouldn’t be needed for your task
Using a yaml multiline syntax ‘>’ that turns newlines into spaces so the task line isn’t too long
Use a double quote for the executable argument. Because it’s in a yaml multilines string you don’t need to escape that or backslashes making the command line more representative of what will run
Use single quotes for quoting YAML values like you need for chdir, no need to escape double quotes
It really depends on how the 'DB.Migrator.exe' binary is set to use credentials over a network path. If it's trying to find a credential in the user's DPAPI cred store then Kerberos with credential delegation is not enough to unlock it. Your options for this case are either:
Use become on the task with the connection user credentials
Use credssp as the transport
[cut]
I've used become, with become method runas, with kerberos and the
result has been perfect, credential delegation has worked
I would also suggest you use win_command and not win_shell for this task. The latter is only really useful if you want shell-isms, to run a binary win_command is usually enough for you. My personal preference here is to use become as that will do more than just fix credential delegation, it runs the task in a similar security context as to how it is run interactively.
[cut]
A few things I've changed
I've done away with the set_fact task as it shouldn't be needed
Used win_command instead of win_shell, the latter shouldn't be needed for your task
Using a yaml multiline syntax '>' that turns newlines into spaces so the task line isn't too long
Use a double quote for the executable argument. Because it's in a yaml multilines string you don't need to escape that or backslashes making the command line more representative of what will run
Use single quotes for quoting YAML values like you need for chdir, no need to escape double quotes
The changes you suggested have been precious, because solved also
escaping issues i've been having!
The task has been performed successfully, with the right user.