Uzak bir Powershell oturumunda kimlik bilgileri nasıl saklanır?


13

Bir Azure Dosya Paylaşımım var ve cmdkey ile VM'lerde kimlik bilgilerine devam ettikten ve net kullanımla bağladıktan sonra bunu Azure VM'lerimden kullanmak istiyorum. Bu, Windows Server 2012 R2'deki yerel bir Powershell oturumunda bu komutların çalıştırılmasıyla sınanmıştır.

Ancak bu adımı bir Azure dağıtım komut dosyasına eklemem gerekiyor. Bir Azure Powershell betiği dizüstü bilgisayarımdan çalışıyor, Azure aboneliğine bağlanıyor ve VM'leri çok sayıda değişken kullanarak sıfırdan oluşturuyor.

Değişkenleri Azure Powershell komut dosyasından yeni oluşturulan VM'deki uzak bir Powershell oturumuna geçirmek için Invoke-Komutunu kullanacak şekilde hesaplandı.

$Session = New-PSSession -ConnectionUri $Uri -Credential $DomainCredential

$ScriptBlockContent = { 
Param ($Arg1,$Arg2,$Arg3)
cmdkey /add:$Arg1 /user:$Arg2 /pass:$Arg3}

Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)

Ve hata:

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)
CMDKEY: Credentials cannot be saved from this logon session.

Sözdizimini kontrol etmek için cmdkey / list ile değiştirildi ve hata yok.

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent
Currently stored credentials:
* NONE *

VM'deki yerel bir Powershell oturumunda iyi çalışan ancak uzak Powershell üzerinden başlatıldığında güncellenmeyen Windows Update PowerShell Modülü (Invoke-WUInstall) ile benzer bir sorun vardı (ve düzeltemedi).

Bunun üstesinden gelmenin bir yolu var mı?

Yanıtlar:


2

Windows'un kimlik doğrulamasını nasıl işlediği nedeniyle, uzak bir PowerShell oturumu aracılığıyla kimlik bilgilerini ayarlamak için CMDKEY kullanmak mümkün değildir, CMDKEY kullanılırken etkileşimli olarak yapılması gerekir.

Sizinkine benzer bir cevap arayan bir başlıktan Don Jones'a alıntı yapmak için:

Bu, Cmdkey komutunun bir sınırlamasıdır - gerçekten bir PowerShell şeyi değildir. Ancak bu Remotig'in kimlik bilgilerini işleme biçimiyle ilgilidir. Uzak oturum aslında bir kimlik bilgisi almaz, yetki verilen bir bilet alır, bu nedenle gerçekten kaydedilecek bir belirteç yoktur. Bunların hepsi tasarımla ilgilidir ve yeniden yapılandırabileceğiniz bir şey değil.


2

Zamanlanmış Görevi kullanmak istemiyorsanız Sysinternal'ın PsExec.exe aracını kullanabilirsiniz. Normalde, bir PowerShell oturumu başlattığınızda, cmdkey'i başarısız olan yerel kullanıcı yerine servicesişlemde çalışır (bunu query sessionuzak bilgisayarda komut çalıştırarak onaylayabilirsiniz ).

Bunun üstesinden gelmek için, yerel kullanıcının işleminde cmdkey.exe'yi çalıştırmamız gerekir PsExec.exe's -i;

Programı, uzak sistemde belirtilen oturumun masaüstüyle etkileşime girecek şekilde çalıştırın. Hiçbir oturum belirtilmezse, işlem konsol oturumunda çalışır.

Şimdi, zorluk uzak makinede yerel kullanıcının oturum kimliğini elde etmektir. Bunu query session, makinede aktif olan oturumların listesini veren komutu çalıştırarak başardım . Olası çözümlerden biri -

$processId = Invoke-Command $session -ScriptBlock  {
param($user)
    $sessions = query session $user;
    return $sessions[1].split(" ", [System.StringSplitOptions]::RemoveEmptyEntries)[2];

} -ArgumentList ($user)

Burada $useruzak bilgisayardaki yerel kullanıcının kullanıcı adını içerir.

Oturum kimliğini aldıktan sonra,

PsExec \\<computer_name> -u <local_user_name> -p <password> -h -i $processId cmdkey.exe /generic:testtt /user:userr /pass:pass

Not:

  1. Uzak makinede bir kullanıcının oturum kimliğini almanın daha iyi yolları olabilir.
  2. Şu anda, PsExec'i çalıştırırken, yine önlenebilecek uzak sistemle bağlantı kuruyorum (test etmedim).
  3. Komutu çalıştıran kullanıcının uzak makinede yönetici erişimine sahip olması gerekir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.