CNAME का उपयोग करते हुए सर्वर पर रिमोटशूट करना, कंप्यूटर का नाम नहीं


9

मैं कंप्यूटर नाम के बजाय CNAME का उपयोग करके सर्वर के साथ काम करने के लिए शक्तियां प्राप्त करने की कोशिश कर रहा हूं। दोनों स्थानीय और दूरस्थ मशीनें एक ही नेटवर्क और डोमेन पर हैं।

मैंने पॉवरशेल रीमोटिंग को सक्षम किया है, और यह कंप्यूटर के नाम के साथ ठीक काम करता है। मैंने अपने ट्रस्टेडहोस्ट्स को CNAME में सेट किया है और CNAME के ​​लिए SPN को जोड़ा है, हालाँकि जब मैं जारी करता Enter-PSSession CNAMEहूं तो मुझे निम्नलिखित मिलते हैं:

Enter-PSSession : Connecting to remote server CNAME failed with the following
error message : WinRM cannot process the request. The following error
occurred while using Kerberos authentication: Cannot find the computer CNAME.
Verify that the computer exists on the network and that the name
provided is spelled correctly. For more information, see the
about_Remote_Troubleshooting Help topic.

निष्पादन setspn -l COMPUTERNAMEमुझे यह देता है:

Registered ServicePrincipalNames for CN=COMPUTERNAME,OU=SERVERS,DC=COMPANY,DC=private:
        WSMAN/CNAME
        WSMAN/COMPUTERNAME
        WSMAN/COMPUTERNAME.local
        TERMSRV/COMPUTERNAME
        TERMSRV/COMPUTERNAME.local
        HOST/COMPUTERNAME
        HOST/COMPUTERNAME.local

CNAME के ​​माध्यम से पहुंच को सक्षम करने के लिए और क्या आवश्यक है?

जवाबों:


5

इस समस्या को हल करने के लिए मैंने एन्टर-PSSession के लिए एक प्रॉक्सी फ़ंक्शन बनाया जो मेरे लिए CNAME को हल करता है। यह आपके मामले में काम नहीं कर सकता है, इस पर निर्भर करता है कि आपको CNAME का उपयोग करने की आवश्यकता क्यों है , लेकिन यह मेरे लिए काम करता है।

प्रॉक्सी पॉवरशेल फ़ंक्शंस पर विवरण: http://www.windowsitpro.com/blog/powershell-with-a-purpose-blog-36/windows-powershell/powershell-proxy-functions-141413

पूर्ण समारोह:

function Enter-PSSession {
[CmdletBinding(DefaultParameterSetName='ComputerName')]
param(
    [Parameter(ParameterSetName='ComputerName', Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
    [Alias('Cn')]
    [ValidateNotNullOrEmpty()]
    [string]
    ${ComputerName},

[Parameter(ParameterSetName='Session', Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
[ValidateNotNullOrEmpty()]
[System.Management.Automation.Runspaces.PSSession]
${Session},

[Parameter(ParameterSetName='Uri', Position=1, ValueFromPipelineByPropertyName=$true)]
[Alias('URI','CU')]
[ValidateNotNullOrEmpty()]
[uri]
${ConnectionUri},

[Parameter(ParameterSetName='InstanceId', ValueFromPipelineByPropertyName=$true)]
[ValidateNotNull()]
[guid]
${InstanceId},

[Parameter(ParameterSetName='Id', Position=0, ValueFromPipelineByPropertyName=$true)]
[ValidateNotNull()]
[int]
${Id},

[Parameter(ParameterSetName='Name', ValueFromPipelineByPropertyName=$true)]
[string]
${Name},

[Parameter(ParameterSetName='Uri')]
[Parameter(ParameterSetName='ComputerName')]
[switch]
${EnableNetworkAccess},

[Parameter(ParameterSetName='ComputerName', ValueFromPipelineByPropertyName=$true)]
[Parameter(ParameterSetName='Uri', ValueFromPipelineByPropertyName=$true)]
[system.management.automation.pscredential]
${Credential},

[Parameter(ParameterSetName='ComputerName')]
[ValidateRange(1, 65535)]
[int]
${Port},

[Parameter(ParameterSetName='ComputerName')]
[switch]
${UseSSL},

[Parameter(ParameterSetName='ComputerName', ValueFromPipelineByPropertyName=$true)]
[Parameter(ParameterSetName='Uri', ValueFromPipelineByPropertyName=$true)]
[string]
${ConfigurationName},

[Parameter(ParameterSetName='ComputerName', ValueFromPipelineByPropertyName=$true)]
[string]
${ApplicationName},

[Parameter(ParameterSetName='Uri')]
[switch]
${AllowRedirection},

[Parameter(ParameterSetName='Uri')]
[Parameter(ParameterSetName='ComputerName')]
[ValidateNotNull()]
[System.Management.Automation.Remoting.PSSessionOption]
${SessionOption},

[Parameter(ParameterSetName='Uri')]
[Parameter(ParameterSetName='ComputerName')]
[System.Management.Automation.Runspaces.AuthenticationMechanism]
${Authentication},

[Parameter(ParameterSetName='Uri')]
[Parameter(ParameterSetName='ComputerName')]
[string]
${CertificateThumbprint})


begin
{
    try {
        $outBuffer = $null
        if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
        {
            $PSBoundParameters['OutBuffer'] = 1
        }
        $PSBoundParameters['ComputerName'] = ([System.Net.Dns]::GetHostByName($PSBoundParameters['ComputerName'])).HostName
        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Core\Enter-PSSession', [System.Management.Automation.CommandTypes]::Cmdlet)
        $scriptCmd = {& $wrappedCmd @PSBoundParameters }
        $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
        $steppablePipeline.Begin($PSCmdlet)
    } catch {
        throw
    }
}

process
{
    try {
        $steppablePipeline.Process($_)
    } catch {
        throw
    }
}

end
{
    try {
        $steppablePipeline.End()
    } catch {
        throw
    }
}
<#

.ForwardHelpTargetName Enter-PSSession
.ForwardHelpCategory Cmdlet

#>

}

मैंने जो एकमात्र लाइन जोड़ी थी वह थी:

$PSBoundParameters['ComputerName'] = ([System.Net.Dns]::GetHostByName($PSBoundParameters['ComputerName'])).HostName

यह मूल नाम-PSSession को कॉल करने से पहले प्रॉक्सी फ़ंक्शन में CNAME को FQDN को हल करता है।

यह मुझे ग्रुप पॉलिसी के माध्यम से अपने ट्रस्टेडहोस्ट में * .mydomain.local सेट करने की अनुमति देता है, और मैं अभी भी "एनटी-पीएस सेशन शॉर्टनेम" या "एन्टर-पीएस सेशन सीएनएमईएम" का उपयोग अतिरिक्त एनटीएस के साथ गड़बड़ किए बिना कर सकता हूं।


अच्छा काम करता है। धन्यवाद।
मेजकिनेटोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.