Windows eşdeğer ssh - uzak bir makineye bağlanma ve komut satırına nasıl erişilir?


19

Windows için * nix makineleri için tasarlanmış bir çerçeveyi genişletmek için bir çözüm bulmakta zorlanıyorum. Çerçeve şu anda bir * nix sunucusundan ve ssh'lardan diğer * nix sunuculara kadar çalışıyor ve günlük dosyalarını denetleme, dosyaları kaynak denetiminden senkronize etme, günlükleri kaynak denetimine geri gönderme vb. Gibi bir dizi farklı komut gerçekleştiriyor. sıkışmış uzak Windows makinelerine nasıl bağlanacağı ve komut satırına nasıl erişileceği. Bağlantı başka bir Windows makinesinden de gelebilir, bir unix makinesinden başlamak zorunda değildir, unix yerine pencerelerden pencerelere gidebilir.

Komutların şu anda unix sistemlerinde nasıl çalıştırıldığına bir örnek. Bunun gibi bir şey, sunucu adları listesinden geçen bir döngüdedir. Windows makinelerinde çalıştırmak için böyle bir şey almam gerekiyor.

ssh ${user}@${server} "cd /app/app_name/logs; <export source control params>; <submit logs to source control>" >> Log.txt

Ayrıca, bir üçüncü taraf aracı kullanmamayı tercih ederim (bütçem yaklaşık 0 $). PsExec ve birkaç diğerlerini kontrol ettim ama yönetici erişimine ihtiyacınız var veya kullanıcıları geçmek / düz metin geçmek zorunda gibi görünüyor.


Tasarım gereği, yönetici olmayan bir kullanıcı normalde uzak bir makinede kod çalıştıramaz. Kendi çözümünüzü oluşturmanız gerekebilir. Kodun çalışması için belirli bir bağlam var mı? Her seferinde çalıştırılacak komutlar aynı mı?
Harry Johnston

MobaSSH'yi bir sunucu olarak kurabilir ve bir istemci olarak macunu kullanabilir veya daha fazla veya daha az istediğinizi yapmak için psexec'i kullanabilirsiniz (deneyimimde kaşlarını çattı), Windows dünyasında eşdeğer deyim bir kabuk kullanmamaktır. hepsi, ancak eski bir komut veya ağ paylaşımı ve eşlenen sürücülerle birlikte güç kaynağı olsun, uzaktan yürütme için komut düzeyi desteğine güvenmek.
Shanteva

Yanıtlar:


14

Kullanım Powershell Remoting: https://msdn.microsoft.com/en-us/powershell/scripting/core-powershell/running-remote-commands

Utanmazca kopyala yapıştırılan:

Windows PowerShell Uzaktan Kumandası

WS-Management protokolünü kullanan Windows PowerShell uzaktan kumandası, bir veya daha fazla uzak bilgisayarda herhangi bir Windows PowerShell komutunu çalıştırmanıza izin verir. Kalıcı bağlantılar kurmanıza, 1: 1 etkileşimli oturumlar başlatmanıza ve birden çok bilgisayarda komut dosyası çalıştırmanıza olanak tanır. Windows PowerShell uzaktan kumandasını kullanmak için, uzak bilgisayarın uzaktan yönetim için yapılandırılması gerekir. Windows PowerShell uzaktan kumandasını yapılandırdıktan sonra, birçok uzaktan kumanda stratejisi kullanılabilir. Bu belgenin geri kalanında bunlardan sadece birkaçı listelenmiştir.

Etkileşimli Oturum Başlatma

Tek bir uzak bilgisayarla etkileşimli bir oturum başlatmak için Enter-PSSession cmdlet'ini kullanın. Örneğin, Server01 uzak bilgisayarıyla etkileşimli bir oturum başlatmak için şunu yazın:

Enter-PSSession Server01

Komut istemi, bağlandığınız bilgisayarın adını gösterecek şekilde değişir. O andan itibaren, herhangi komutlar uzak bilgisayarda istemi vadede yazdığınız ve sonuçlar yerel bilgisayarda görüntülenir.

Etkileşimli oturumu sonlandırmak için şunu yazın:

Exit-PSSession

Uzak Komut Çalıştırma

Bir veya birçok uzak bilgisayarlarda herhangi bir komutu çalıştırmak için, Invoke-Command cmdlet'ini kullanın. Örneğin, Server01 ve Server02 uzak bilgisayarlarında Get-UICulture komutunu çalıştırmak için aşağıdakileri yazın:

invoke-command -computername Server01, Server02 {get-UICulture}

Çıktı bilgisayarınıza geri gönderilir.

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

Komut Dosyası Çalıştırma

Bir veya birçok uzak bilgisayarlarda bir komut dosyası çalıştırmak için, Invoke-Command cmdlet'inin DosyaYolu parametresini kullanın. Komut dosyasının yerel bilgisayarınızda açık veya erişilebilir olması gerekir. Sonuçlar yerel bilgisayarınıza döndürülür.

Örneğin, aşağıdaki komutu server01 ve Server02 uzak bilgisayarlarda DiskCollect.ps1 komut dosyasını çalıştırır.

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

Kalıcı Bağlantı Kurun

Veri paylaşan bir dizi ilişkili komutu çalıştırmak için, uzak bilgisayarda bir oturum oluşturun ve sonra oluşturduğunuz oturumda komutları çalıştırmak için Invoke-Command cmdlet'ini kullanın. Uzak oturum oluşturmak için New-PSSession cmdlet'ini kullanın.

Örneğin, aşağıdaki komut Server01 bilgisayarında uzak oturum ve Server02 bilgisayarında başka bir uzak oturum oluşturur. Oturum nesnelerini $ s değişkenine kaydeder.

$s = new-pssession -computername Server01, Server02

Artık oturumlar kurulduğuna göre, içinde herhangi bir komutu çalıştırabilirsiniz. Oturumlar kalıcı olduğundan, bir komutta veri toplayabilir ve sonraki komutta kullanabilirsiniz.

Örneğin, aşağıdaki komutu $ s değişkeninde oturumlarda bir Get-Düzeltme komutu çalıştırır ve $ h değişkeni sonuçlarını kaydeder. $ H değişkeni $ s içinde oturumların her birinde oluşturulur, ancak yerel oturumda yok.

invoke-command -session $s {$h = get-hotfix}

Şimdi $ h değişkenindeki verileri aşağıdaki gibi sonraki komutlarda kullanabilirsiniz. Sonuçlar yerel bilgisayarda görüntülenir.

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }

5
Bu bunu yapmak için yerli yoludur ve kabul cevap IMHO olmalıdır.
Gregory Higley

Sunucuda SSH kullanımı portu 22 bana bu PowerShell çözüm kullanımını portunu kontrol yardım eder misiniz, bağlamak için?
Luke

1
@Luke blogs.technet.microsoft.com/christwe/2012/06/20/... 5985-5986 varsayılanlardır ama birçok şey gibi, başka bir bağlantı noktası belirtebilirsiniz
Shanteva

4

Deneyin tunnellier Bitvise dan. Bu bir ssh istemcisi. Windows makinesine bağlanmak için bir ssh sunucusu da var . Bu ikisi, web proxy veya bağlantı noktası tüneli gibi daha gelişmiş şeylerle birlikte çok güvenli bağlantılar kurmanızı sağlar.


Maalesef SSH sunucusu değil ücretsiz yazılımdır.
Harry Johnston


2

Sen deneyebilirsiniz PsExec'i size dosya paylaşım hizmeti üzerinden bir uzak kabuk verir (veya ancak bu denir). Linux'u istemci olarak kullanmak istiyorsanız winexe de var .


1

Yapılandırma sunucusu ve istemci üzerinde birkaç dakika sürebilir olsa Gerçekten PowerShell fikir gibi.

PowerShell kullanımını öneren Shanteva'nın tam cevabının yanı sıra, PowerShell sunucusuna uzaktan bağlantıyı gerçekten Etkinleştirme (ve İzin Verme) hakkında howtogeek web sitesine Burada göz atmalısınız. Sunucu bilgisayarda biraz yapılandırma gerekli.

İki önemli şeyler yapmanız gereken: (? Ben 'bir yönetici olarak' her yapılandırmayı yapmak zorunda söz gerekmez sağ Sadece açık PowerShell / cmd 'Yönetici olarak')

  • İlk olarak, WinRM hizmeti üzerinde (uzaktan komutları işleyen windows uygulaması) etkinleştirmek SERVER .

Sunucu bilgisayarda PowerShell'i açın ve çalıştırın:

Enable-PSRemoting -Force

Bunu yapmanın başka bir yolu daha var. Bir komut istemi açabilir ve çalıştırabilirsiniz:

winrm -quickconfig

Değiştirilecek çok daha fazla yapılandırma olabilir. Şimdiye gerek yok.

  • İkincisi, istemci ve sunucunun her zaman birbirlerini doğrulamaya çalıştığı dikkat çekicidir. Sunucu, istemcinin sunucuya gerçekten erişmesine izin verip vermediğinden emin olmak istiyor. Bu uğruna sunucuya bazı kimlik doğrulama bilgileri vereceksiniz (SSH'ye benzer şekilde, belki Kullanıcı Adı / Parola sağlıyorsunuz). Tersine, istemci sunucunun güvenilir olduğundan emin olmak ister. Akıllı bir genel sertifika sağlayan bir sunucuya güvenmek veya IP adresine göre güvenmek veya belki de herkese güvenmek gibi farklı şemalar kullanılabilir! Yine bir sunucunun bazı kimlik doğrulama bilgileri sağlayabildiği SSH ile aynı prosedürü uygularız. (Şimdilik sadece SSH ayrıntılarını unutalım.)

Her iki bilgisayar da aynı 'etki alanındaysa (herkesin farklı kuralları ve rolleri atanmış bir grup bilgisayar), yordam basit görünüyor (bunu denemedim).

AMA, muhtemelen sunucunuza Internet üzerinden (teknik olarak WAN ağı denir) erişmek istediğiniz için, bazı komplikasyonlar vardır ve uzak sunucuyla bağlantıya izin vermek için bazı yapılandırmaları değiştirmeniz gerekir. Açık MÜŞTERİ bilgisayara WinRM hizmeti sağlamaktadır. Prosedür yukarıdaki sunucu için yaptığımızla benzerdir. Sadece komutu çalıştırın:

Enable-PSRemoting -Force

(Yine dikkate değer! Bazı referanslar, istemci bilgisayar ve sunucu bilgisayarın 'Özel' ağlarda olması gerektiğini veya her şeyin işe yaramayacağını söylüyor. Yukarıdaki komutu çalıştırdığımda bunun için hata iletileri alıyorum, ancak her şey çalışıyor . Bundan emin değilim. Yukarıda belirtilen web sayfasını kontrol edin.)

Ardından PowerShell'deki İSTEMCİ bilgisayarında çalıştırın :

Set-Item wsman:\localhost\client\trustedhosts *

Bu, istemcinin tüm sunuculara (ana makineler) güveneceği anlamına gelir. Son olarak, bunu çalıştırın ( MÜŞTERİ üzerinde tekrar vurgularım):

Restart-Service WinRM

Gitmeye hazırsın. Shanteva'nın cevabının geri kalanını kontrol edin. MÜŞTERİ bilgisayarında, örneğin çalıştırın:

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

Bir şifre isteyecektir ve uzak konsol aşağıdaki gibi görünür:

[12.34.56.78]: PS C:\Users\Administrator\Documents>

Sonra sadece SSH için yaptığınız gibi komutları girin.

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.