PowerShell / PowerShell/PowerShell-Docker

NTLM auth not functional in Ubuntu-22.04 image

Đang mở
#790 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
Dockerfile
Star
449
Fork
158
Merge trung bình
3 ngày 10 giờ
Pull request đã merge (30 ngày)
1

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu bằng cách chạy lệnh Docker của Ubuntu 22.04 và các bước PSWSMan và Install-WSMan được liệt kê để tái hiện lỗi NTLM. So sánh cấu hình OpenSSL của image với script được cung cấp, sau đó xác minh rằng image hỗ trợ Enter-PSSession với Negotiate mà không chỉnh sửa thủ công /etc/ssl/openssl.cnf hoặc khởi động lại PowerShell.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
docker, powershell, ubuntu
Lĩnh vực
authentication, devops, operating-systems
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.