PowerShell / PowerShell/PowerShell-Docker

NTLM auth not functional in Ubuntu-22.04 image

Open
#790 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Dockerfile
Stars
449
Forks
158
Avg merge
3d 10h
Merged PRs (30d)
1

Description

Prerequisites
  • Write a descriptive title.
  • Make sure you are able to repro it on the latest image.
  • Search the existing issues.
  • Verified that this is not a Known Issue
  • Verified this is not an issues in the underlying windows container that should be reported to Windows Feedback Hub
Steps to reproduce
docker run --rm -it mcr.microsoft.com/powershell:lts-7.2-ubuntu-22.04 bash
root@container:/# pwsh -nop -c "& { Install-Module -Name 'PSWSMan' -AcceptLicense -Force -Scope AllUsers}"
root@container:/# pwsh -nop -c "& { Install-WSMan }"
root@container:/# pwsh
PS /> Enter-PSSession -ComputerName myserver -Credential (Get-Credential) -Authentication Negotiate

PowerShell credential request
Enter your credentials.
User: domain\myusername
Password for user domain\myusername: ***************

Enter-PSSession: Connecting to remote server myserver failed with the following error message : acquiring creds with username only failed No credentials were supplied, or the credentials were unavailable or inaccessible SPNEGO cannot find mechanisms to negotiate For more information, see the about_Remote_Troubleshooting Help topic.
Expected behavior
docker run --rm -it mcr.microsoft.com/powershell:lts-7.2-ubuntu-22.04 bash
root@container:/# pwsh -nop -c "& { Install-Module -Name 'PSWSMan' -AcceptLicense -Force -Scope AllUsers}"
root@container:/# pwsh -nop -c "& { Install-WSMan }"
root@container:/# pwsh
PS /> Enter-PSSession -ComputerName myserver -Credential (Get-Credential) -Authentication Negotiate

PowerShell credential request
Enter your credentials.
User: domain\myusername
Password for user domain\myusername: ***************

[myserver]: PS C:\Users\myusername\Documents>


### Actual behavior

```console
docker run --rm -it mcr.microsoft.com/powershell:lts-7.2-ubuntu-22.04 bash
root@container:/# pwsh -nop -c "& { Install-Module -Name 'PSWSMan' -AcceptLicense -Force -Scope AllUsers}"
root@container:/# pwsh -nop -c "& { Install-WSMan }"
root@container:/# pwsh

PS /> Enter-PSSession -ComputerName myserver -Credential (Get-Credential) -Authentication Negotiate

PowerShell credential request
Enter your credentials.
User: domain\myusername
Password for user domain\myusername: ***************

Enter-PSSession: Connecting to remote server myserver failed with the following error message : acquiring creds with username only failed No credentials were supplied, or the credentials were unavailable or inaccessible SPNEGO cannot find mechanisms to negotiate For more information, see the about_Remote_Troubleshooting Help topic.

NOTE

Running the following pwsh script in the container and restarting pwsh resolves the issue.


<#
    .SYNOPSIS Enables support for legacy protocols in openssl which is needed for WinRM NTLM auth on Ubuntu 22.04
#>
[CmdletBinding()]
param()

$ErrorActionPreference = 'Stop'

Write-Host 'Enabling OpenSSL Legacy protocols...'
$opensslcnf = '/etc/ssl/openssl.cnf'

if (-not (Test-Path $opensslcnf)) { throw "Unable to find file: $opensslcnf" }

$content = Get-Content -Path $opensslcnf -Raw
$replacements = @(
    [PSCustomObject]@{
        regex = '\[provider_sect\]\s*\ndefault\s*=\s*default_sect\s*\n'
        newText = "[provider_sect]`ndefault = default_sect`nlegacy = legacy_sect`n"
    },
    [PSCustomObject]@{
        regex = '\[default_sect\]\s*\n\s*(#)*\s*activate\s*=\s*1\s*\n'
        newText = "[default_sect]`nactivate = 1`n[legacy_sect]`nactivate = 1`n"
    }
)

foreach ($replacement in $replacements) {
    if (-not ($content -match $replacement.regex)) {
        throw "Unable to find regex match for pattern: $($replacement.regex)"
    }
    $content = $content -replace $replacement.regex,$replacement.newText
}

$content | Out-File -Path '/etc/ssl/openssl.cnf' -NoNewline -Force


### Error details

```console
See above
Environment data
{
        "schemaVersion": 2,
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "size": 4174,
                "digest": "sha256:905358640d7b3e6b9e228ebfdcf362f5011103df2e5233a67261f9ac604ef256"
        },
        "layers": [
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "size": 30446577,
                        "digest": "sha256:3dd181f9be599de628e1bc6d868d517125e07f968824bcf7b7ed8d28ad1026b1"
                },
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "size": 100805825,
                        "digest": "sha256:499091a85d98e22bacb4f4df74202b35b75d6acb7f5e84cec0aa3df496f1b4cd"
                }
        ]
}
Visuals

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by running the Ubuntu 22.04 Docker command and the listed PSWSMan and Install-WSMan steps to reproduce the NTLM failure. Compare the image's OpenSSL configuration with the provided script, then verify that the image supports Enter-PSSession with Negotiate without manually editing /etc/ssl/openssl.cnf or restarting PowerShell.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, powershell, ubuntu
Domain
authentication, devops, operating-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.