পাসওয়ার্ডের জন্য অনুরোধ না করে পাওয়ারশেল শংসাপত্রগুলি ব্যবহার করা


147

আমি একটি ডোমেনের অন্তর্ভুক্ত এমন একটি রিমোট কম্পিউটার পুনরায় চালু করতে চাই। আমার প্রশাসক অ্যাকাউন্ট আছে তবে পাওয়ারশেল থেকে এটি কীভাবে ব্যবহার করতে হয় তা আমি জানি না।

আমি জানি যে একটি Restart-Computerসেমিডলেট রয়েছে এবং আমি শংসাপত্রটি পাস করতে পারি তবে আমার ডোমেনটি যদি উদাহরণস্বরূপ হয় তবে mydomainআমার ব্যবহারকারীর নামটি myuserএবং আমার পাসওয়ার্ডটি এটি mypasswordব্যবহার করার সঠিক বাক্য গঠন কী?

আমাকে পুনরায় বুট করার সময়সূচী তৈরি করতে হবে যাতে আমাকে পাসওয়ার্ডটি টাইপ করতে হবে না।


আপনার এই লিঙ্কটি
জাম

গেট-শংসাপত্র ডোমেন01 \ অ্যাডমিন01 এর অর্থ কী? পরবর্তী কমান্ডটি হ'ল পুনঃসূচনা-কম্পিউটার-কম্পিউটার-কম্পিউটার -পরিবর্তন -ট্রোকলিটিট 10-বিশ্বাসযোগ্য $ সি। এর অর্থ কী গেট-শংসাপত্রটি জিজ্ঞাসা না করে পাসওয়ার্ড পুনরুদ্ধার করে?
সমস্ত চোখ আমার উপর

উত্তর:


202

সমস্যা Get-Credential হ'ল এটি সর্বদা পাসওয়ার্ডের জন্য অনুরোধ করবে। এর চারপাশে একটি উপায় রয়েছে তবে এতে ফাইল সিস্টেমে একটি সুরক্ষিত স্ট্রিং হিসাবে পাসওয়ার্ড সংরক্ষণ করা জড়িত।

নীচের নিবন্ধটি ব্যাখ্যা করে যে এটি কীভাবে কাজ করে:

কোনও প্রম্পট ছাড়াই PSCredentials ব্যবহার করা হচ্ছে

সংক্ষেপে, আপনি নিজের পাসওয়ার্ড (এনক্রিপ্টড স্ট্রিং হিসাবে) সংরক্ষণ করার জন্য একটি ফাইল তৈরি করেন। নিম্নলিখিত লাইনটি কোনও পাসওয়ার্ডের জন্য অনুরোধ করবে এবং c:\mysecurestring.txtএটিকে এনক্রিপ্ট করা স্ট্রিং হিসাবে সংরক্ষণ করবে । আপনি শুধুমাত্র একবার এই করতে হবে:

read-host -assecurestring | convertfrom-securestring | out-file C:\mysecurestring.txt

আপনি -Credentialপাওয়ারশেল কমান্ডে যেখানেই আর্গুমেন্ট দেখেন তার মানে আপনি একটি পাস করতে পারেন PSCredential। সুতরাং আপনার ক্ষেত্রে:

$username = "domain01\admin01"
$password = Get-Content 'C:\mysecurestring.txt' | ConvertTo-SecureString
$cred = new-object -typename System.Management.Automation.PSCredential `
         -argumentlist $username, $password

$serverNameOrIp = "192.168.1.1"
Restart-Computer -ComputerName $serverNameOrIp `
                 -Authentication default `
                 -Credential $cred
                 <any other parameters relevant to you>

আপনার আলাদা আলাদা -Authenticationসুইচের মানের প্রয়োজন হতে পারে কারণ আমি আপনার পরিবেশ জানি না।


23
আপনি করতে পারেন ConvertTo-SecureString "password" -AsPlainText -Force
x0n

14
কেবল এটি পরিষ্কার করতে,$password = ConvertTo-SecureString "password" -AsPlainText -Force
আকিরা ইয়ামামোটো

-আমার জন্য রিড-হোস্ট প্যারামিটারগুলিতে ক্রেডিটেন্টাল [ইউজারনেম] প্রয়োজন ছিল, অন্যথায় পাওয়ারশেলটি কেবল স্তব্ধ হয়ে যায়। পড়ার-হোস্ট হোস্টে -সক্রেনডিয়াল পাস করার পরে আপনাকে পাওয়ারশেল কনসোলে সরাসরি অনুরোধ করা হবে এবং পাসওয়ার্ডটি সঠিকভাবে সংরক্ষণ করা হবে। ধন্যবাদ!
সেফিরট

আমি যখন পাওয়ারশেলের প্রেরণ-মেলম্যাসেজ ফাংশনটি ব্যবহার করি তখন কীভাবে এটি কাজ করতে হয় তা নির্ধারণ করার চেষ্টা করছি। আমি আমার ইমেল ব্যবহারকারীর শংসাপত্রগুলি সংরক্ষণ করতে এবং পাস করতে চাই তাই আমাকে এটি প্রবেশ করাতে হবে না this কোনও উপায় কীভাবে এটি করবেন?
KangarooRIOT

@ ব্যবহারকারী3681591 - আমি মন্তব্যগুলিতে এটি না করে নতুন প্রশ্ন জিজ্ঞাসা করার পরামর্শ দেব। ধন্যবাদ।
কেভ

71

অন্য উপায় আছে, কিন্তু ...

আপনি যদি স্ক্রিপ্ট ফাইলটিতে আপনার পাসওয়ার্ডটি না চান তবে এটি করবেন না (স্ক্রিপ্টগুলিতে পাসওয়ার্ড সংরক্ষণ করা ভাল ধারণা নয়, তবে আমাদের মধ্যে কেউ কেউ কীভাবে তা জানতে চান))

ঠিক আছে, এটি ছিল সতর্কতা, কোডটি এখানে:

$username = "John Doe"
$password = "ABCDEF"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr

$cred "এবিসিডিইএফ" পাসওয়ার্ড সহ জন ডোয়ের শংসাপত্র থাকবে।

ব্যবহারের জন্য পাসওয়ার্ড প্রস্তুত করার বিকল্প উপায়:

$password = convertto-securestring -String "notverysecretpassword" -AsPlainText -Force

ধন্যবাদ। এটি খুব সহায়ক। আমার ক্ষেত্রে আমি একটি কাস্টম পাওয়ারশেল সেমিডলেট তৈরি করছিলাম যা ব্যবহারকারীর নাম এবং পাসওয়ার্ড নেয় (সুরক্ষিত স্ট্রিং হিসাবে)। অভ্যন্তরীণভাবে সেমিডলেট আরও কয়েকটি অন্যান্য সিএমডিলেট কল করে, কারও কারও কাছে কেবল ব্যবহারকারীর এবং পাসওয়ার্ডের প্রয়োজন তবে তাদের একটির শংসাপত্রের প্রয়োজন তাই আমার স্ক্রিপ্টে পাসওয়ার্ডটি হার্ড-কোড করার দরকার নেই।
বেনআর

20
কিছুটা সহজ: $ পাসওয়ার্ড = রূপান্তর-সুরক্ষিত স্ট্রিং-স্ট্রিং "notवरीsecretpassword" -AsPlainText
স্যাম

আমি যখন পাওয়ারশেলের প্রেরণ-মেলম্যাসেজ ফাংশনটি ব্যবহার করি তখন কীভাবে এটি কাজ করতে হয় তা নির্ধারণ করার চেষ্টা করছি। আমি আমার ইমেল ব্যবহারকারীর শংসাপত্রগুলি সংরক্ষণ করতে এবং পাস করতে চাই তাই আমাকে এটি প্রবেশ করাতে হবে না this কোনও উপায় কীভাবে এটি করবেন?
KangarooRIOT

@ ব্যবহারকারী3681591 এটি সেন্ড-মেইল-মেসেজ -স্রেশনাল $ ক্রেডিট (এই পোস্টে প্রদর্শিত হিসাবে তৈরি করা $ ক্রেডিট সহ) হবে
জেরোইন ল্যান্ডহির

@ জিরোয়ান লান্ধির আমি আপনার উত্তরটি চেষ্টা করেছি (সহায়তার জন্য ধন্যবাদ!) তবে এটি কার্যকর হয়নি। আমার ত্রুটিটি হ'ল: প্রত্যক্ষদর্শী: শব্দটি '-Credency' একটি সেমিডলেট, ফাংশন, স্ক্রিপ্ট ফাইল বা অপারেবল প্রোগ্রামের নাম হিসাবে স্বীকৃত নয়।
ক্যাঙ্গারওরিওট

29

শংসাপত্র সংরক্ষণ করার বিষয়ে, আমি দুটি ফাংশন ব্যবহার করি (এটি সাধারণত আমার মডিউল থেকে লোড হওয়া মডিউলে থাকে):

#=====================================================================
# Get-MyCredential
#=====================================================================
function Get-MyCredential
{
param(
$CredPath,
[switch]$Help
)
$HelpText = @"

    Get-MyCredential
    Usage:
    Get-MyCredential -CredPath `$CredPath

    If a credential is stored in $CredPath, it will be used.
    If no credential is found, Export-Credential will start and offer to
    Store a credential at the location specified.

"@
    if($Help -or (!($CredPath))){write-host $Helptext; Break}
    if (!(Test-Path -Path $CredPath -PathType Leaf)) {
        Export-Credential (Get-Credential) $CredPath
    }
    $cred = Import-Clixml $CredPath
    $cred.Password = $cred.Password | ConvertTo-SecureString
    $Credential = New-Object System.Management.Automation.PsCredential($cred.UserName, $cred.Password)
    Return $Credential
}

এবং এটি:

#=====================================================================
# Export-Credential
# Usage: Export-Credential $CredentialObject $FileToSaveTo
#=====================================================================
function Export-Credential($cred, $path) {
      $cred = $cred | Select-Object *
      $cred.password = $cred.Password | ConvertFrom-SecureString
      $cred | Export-Clixml $path
}

আপনি এটি এর মতো ব্যবহার করুন:

$Credentials = Get-MyCredential (join-path ($PsScriptRoot) Syncred.xml)

যদি শংসাপত্রের ফাইলটি উপস্থিত না থাকে তবে আপনাকে প্রথমবারের জন্য অনুরোধ জানানো হবে, সেই সময়ে এটি কোনও এক্সএমএল ফাইলের ভিতরে একটি এনক্রিপ্ট করা স্ট্রিংয়ে শংসাপত্রগুলি সংরক্ষণ করবে। দ্বিতীয়বার আপনি এই লাইনটি চালাবেন, xmlfile আছে এবং স্বয়ংক্রিয়ভাবে খোলা হবে।


10

আমাকে একটি রিমোট সার্ভার থেকে এসসিএম 2012 ফাংশন পরিচালনা করতে হবে যার জন্য আলাদা শংসাপত্রের প্রয়োজন। কনভার্ট টোটো-সিকিউরস্ট্রিং-এ ইনপুট হিসাবে একটি পাসওয়ার্ড ডিক্রিপশন ফাংশনের আউটপুট পেরিয়ে আমি পরিষ্কার-পাঠ্য পাসওয়ার্ডগুলি এড়িয়ে চলেছি। স্পষ্টতার জন্য, এটি এখানে প্রদর্শিত হয় না।

আমি দৃ decla়ভাবে আমার ঘোষণা টাইপ করতে চাই। $ StrPass এর জন্য প্রকারের ঘোষণাটি সঠিকভাবে কাজ করে।

[object] $objCred = $null
[string] $strUser = 'domain\userID'
[System.Security.SecureString] $strPass = '' 

$strPass = ConvertTo-SecureString -String "password" -AsPlainText -Force
$objCred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($strUser, $strPass)

4

আপনি যদি এটি পুনরায় বুট করার সময় নির্ধারণ করে থাকেন তবে দুটি উপায় আপনি এখানে এটি করতে পারেন।

প্রথমে আপনি শংসাপত্রাদি ব্যবহার করে একটি মেশিনে একটি টাস্ক তৈরি করতে পারেন যা অন্য মেশিনকে সংযুক্ত করতে এবং পুনরায় বুট করার জন্য প্রয়োজনীয় অধিকার রয়েছে। এটি শিডিয়ুলারকে শংসাপত্রগুলি সুরক্ষিতভাবে সংরক্ষণের জন্য দায়বদ্ধ করে। রিবুট কমান্ড (আমি একজন পাওয়ারশেল লোক, তবে এটি ক্লিনার))

SHUTDOWN /r /f /m \\ComputerName

স্থানীয় মেশিনে একটি নির্ধারিত টাস্ক তৈরি করতে, দূরবর্তীভাবে অন্যটিকে পুনরায় বুট করার জন্য কমান্ড লাইনটি হ'ল:

SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f /m \\ComputerName" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU "domain\username" /RP "password"

আমি দ্বিতীয় উপায়ে পছন্দ করি যেখানে আপনি আপনার বর্তমান শংসাপত্রগুলি একটি নির্ধারিত টাস্ক তৈরি করতে ব্যবহার করেন যা রিমোট মেশিনে সিস্টেম অ্যাকাউন্টের সাথে চলে।

SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU SYSTEM /S ComputerName

এটি জিইউআইয়ের মাধ্যমেও কাজ করে, কেবল পাসওয়ার্ডের ক্ষেত্র ফাঁকা রেখে ব্যবহারকারীর নাম হিসাবে SYSTEM লিখুন।


1
read-host -assecurestring | convertfrom-securestring | out-file C:\securestring.txt
$pass = cat C:\securestring.txt | convertto-securestring
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "test",$pass
$mycred.GetNetworkCredential().Password

পাসওয়ার্ডগুলি এইভাবে সংরক্ষণের সাথে খুব সতর্কতা অবলম্বন করুন ... এটি এর মতো সুরক্ষিত নয় ...


1

আমি একটি উদাহরণ দেখেছি যা আমদানি / রফতানি-সিএলআইএক্সএমএল ব্যবহার করে।

আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তার জন্য এটি আমার প্রিয় কমান্ড। এবং এগুলি ব্যবহার করার সহজ উপায়।

$passwordPath = './password.txt'
if (-not (test-path $passwordPath)) {
    $cred = Get-Credential -Username domain\username -message 'Please login.'
    Export-Cli -InputObject $cred -Path $passwordPath
}
$cred = Import-CliXML -path $passwordPath

সুতরাং ফাইলটি স্থানীয়ভাবে উপস্থিত না থাকলে এটি শংসাপত্রগুলির জন্য অনুরোধ জানাবে এবং সেগুলি সংরক্ষণ করবে। এটি একটি নিতে হবে[pscredential]এটি ইস্যু ছাড়াই কোনও বিষয় এবং একটি সুরক্ষিত স্ট্রিং হিসাবে শংসাপত্রগুলি গোপন করবে।

অবশেষে কেবল আপনার মতো শংসাপত্র ব্যবহার করুন।

Restart-Computer -ComputerName ... -Credentail $cred

সিকিউরিটিতে নোট :

নিরাপদে ডিস্কে শংসাপত্র সংরক্ষণ করুন

সমাধানটি পড়ার সময়, আপনি প্রথমে ডিস্কে একটি পাসওয়ার্ড সংরক্ষণের বিষয়ে সতর্ক থাকতে পারেন। সংবেদনশীল তথ্য সহ আপনার হার্ড ড্রাইভটি লিটারে ফেলার বিষয়ে সতর্ক হওয়া স্বাভাবিক (এবং বিচক্ষণ), এক্সপোর্ট-ক্লাইक्सএমএল সেমিডলেট উইন্ডোজ স্ট্যান্ডার্ড ডেটা সুরক্ষা এপিআই ব্যবহার করে শংসাপত্রাদি এনক্রিপ্ট করে। এটি নিশ্চিত করে যে কেবলমাত্র আপনার ব্যবহারকারীর অ্যাকাউন্টই এর সামগ্রীগুলি সঠিকভাবে ডিক্রিপ্ট করতে পারে। একইভাবে, কনভার্টফ্রম-সিকিওরস্ট্রিং সেমিডলেটও আপনার সরবরাহিত পাসওয়ার্ড এনক্রিপ্ট করে।

সম্পাদনা: কেবল আসল প্রশ্নটি আবার পড়ুন। উপরেরগুলি এতক্ষণ কাজ করবে যতক্ষণ আপনি [pscredential]হার্ড ডিস্কে আরম্ভ করেছেন । এটি হ'ল যদি আপনি এটি আপনার স্ক্রিপ্টে ফেলে দেন এবং স্ক্রিপ্টটি একবার চালান এটি একবার সেই ফাইলটি তৈরি করবে এবং তারপরে স্ক্রিপ্টটি অপ্রত্যাশিতভাবে চালানো সহজ হবে।


1

সমাধান

$userName = 'test-domain\test-login'
$password = 'test-password'

$pwdSecureString = ConvertTo-SecureString -Force -AsPlainText $password
$credential = New-Object -TypeName System.Management.Automation.PSCredential `
    -ArgumentList $userName, $pwdSecureString

বিল্ড মেশিনগুলির
জন্য পূর্ববর্তী কোডে ব্যবহারকারীর নাম এবং পাসওয়ার্ডের মানগুলি গোপনে প্রতিস্থাপন করুন ("লগ থেকে লুকানো") আপনার বিল্ড-মেশিনের পরিবেশগত ভেরিয়েবল

পরীক্ষার ফলাফল দ্বারা

'# Results'
$credential.GetNetworkCredential().Domain
$credential.GetNetworkCredential().UserName
$credential.GetNetworkCredential().Password

এবং আপনি দেখতে পাবেন

# Results
test-domain
test-login
test-password

-3

কেন আপনি খুব সহজ কিছু চেষ্টা করবেন না?

কমান্ড 'শাটডাউন / আর / এফ / টি 0' এবং সিএমডি থেকে পিসি তালিকা সহ psexec ব্যবহার করুন।


এটি একটি নির্দিষ্ট ক্ষেত্রে। বিন্দুটি কোনও এলোমেলো দৃশ্যে লগইন উইন্ডো তৈরি করছে না।
ওভারমাইন্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.