PowerShell / PowerShell/PowerShell-Docker
NTLM auth not functional in Ubuntu-22.04 image
Offen
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Dockerfile
- Sterne
- 449
- Forks
- 158
- Ø Merge
- 3 T. 10 Std.
- Gemergte PRs (30 T.)
- 1
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Führen Sie zunächst den Ubuntu 22.04-Docker-Befehl sowie die aufgeführten PSWSMan- und Install-WSMan-Schritte aus, um den NTLM-Fehler zu reproduzieren. Vergleichen Sie die OpenSSL-Konfiguration des Images mit dem bereitgestellten Skript und überprüfen Sie anschließend, dass das Image Enter-PSSession mit Negotiate unterstützt, ohne /etc/ssl/openssl.cnf manuell zu bearbeiten oder PowerShell neu zu starten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- docker, powershell, ubuntu
- Bereich
- authentication, devops, operating-systems
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100