PowerShell / PowerShell/PowerShell-Docker
NTLM auth not functional in Ubuntu-22.04 image
Abierto
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Dockerfile
- Estrellas
- 449
- Forks
- 158
- Merge medio
- 3 d 10 h
- PR fusionados (30 d)
- 1
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza ejecutando el comando de Docker de Ubuntu 22.04 y los pasos de PSWSMan e Install-WSMan indicados para reproducir el fallo de NTLM. Compara la configuración de OpenSSL de la imagen con el script proporcionado y, a continuación, verifica que la imagen admite Enter-PSSession con Negotiate sin editar manualmente /etc/ssl/openssl.cnf ni reiniciar PowerShell.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- docker, powershell, ubuntu
- Área
- authentication, devops, operating-systems
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100