SSH przez PowerShell


54

Czy można otworzyć sesję SSH w PowerShell? Obecnie używam PuTTY, ale byłoby miło, gdyby nie były wymagane.


1
Wiem, że nie jest to obsługiwane natywnie, ale chciałbym też znaleźć rozwiązanie.
egorgry

5
co jest nie tak po prostu wywołując putty.exe (lub plink.exe) z wiersza poleceń?
Javier

4
Javier: Zacznijmy od tego, że plink jest tylko klientem SSH i całkowicie brakuje mu funkcji emulacji terminala.
grawitacja

+1, sam chciałbym zobaczyć rozwiązanie. I w większości nienawidzę kitu. (Użytkownik SecureCRT)
Urda

1
Microsoft ogłasza przyszłe wsparcie dla SSH: blogs.msdn.com/b/powershell/archive/2015/06/03/…
nw.

Odpowiedzi:



9

Napisałem moduł do obsługi sesji SSH z PowerShell, oparty na bibliotece SSH.NET znalezionej w CodePlex. Ma New-SshSession do tworzenia połączeń (obsługiwanych jest wiele obiektów docelowych przy użyciu różnych poświadczeń), a następnie można użyć Invoke-SshCommand do uruchamiania poleceń na dowolnej liczbie hostów docelowych. Istnieje nawet Enter-SshSession, która ma bardzo podstawową, interaktywną powłokę.

Artykuł jest tutaj .

Joakim


6

Pobierz OpenSSH dla Windows i wybierz instalację tylko klienta podczas instalacji. Cały instalator zawierający serwer ma mniej niż 3 MB, a klient działa dobrze.


2
W tym projekcie jest wiele ostrzeżeń o tym, że instalator tupie zmienną System PATH w Windows 7 i 8 - bądź ostrożny!
Patrick M

2

Nadal wysyłam odpowiedź na to pytanie, ponieważ uznałem, że zaakceptowana odpowiedź w ogóle nie odpowiada moim potrzebom (tylko płatne rozwiązanie lub inne, które nie radzi sobie dobrze z terminalem).

Oczywistym rozwiązaniem tego problemu jest zainstalowanie programu cygwin. Wykonaj minimalną instalację, jeśli chcesz tylko ssh, ale ponieważ PowerShell zapewnia podstawowy poziom kompatybilności z powłokami * nix (podstawowe polecenia wciąż tam są, „/” dla katalogów itp.), Naprawdę można używać rzeczy cygwin w Powershell.

Zainstaluj Cygwin tutaj


1
Cygwin? Bleck! Równie dobrze może odpalić
maszynę

Jak to ? ssh to plik wykonywalny skompilowany z systemem Windows. Jeśli nie chcesz współpracować z uniksowymi rzeczami, nie powinno być zaskoczeniem, że musisz do tego zainstalować kilka bibliotek.
raph.amiard

Zobacz odpowiedź Ameer Deen, myślę, że to najlepsze rozwiązanie tutaj i działa świetnie.
Hosh Sadiq

1
@HoshSadiq Z opisu OpenSSH dla Windows: „Instalator do minimalnej instalacji środowiska Cygwin odpowiedni do uruchamiania serwera OpenSSH na platformie Windows”.
Douglas Ludlow


1

Jeśli maszyną docelową jest okno systemu Windows, możesz zamiast tego użyć narzędzia PowerShell Remoting .

To zdecydowanie nie to samo, co SSH. Są plusy (sprowadzanie obiektów z powrotem przez drut!) I wady (a jeśli celem jest Linux?).




1

Jednym ze sposobów uzyskania bardzo dobrego natywnego klienta ssh jest zainstalowanie git z GitHub ( https://windows.github.com/ ).

Tworzy skrót do szykownego okna z wszystkimi ścieżkami ustawionymi poprawnie, aby używać git w PowerShell. To automatycznie pochodzi z plików binarnych ssh i scp na ścieżce.

Nie jestem pewien, co to jest za implementacja, ale działa jak Linux, tzn. Nie wydaje się być oparty na .Net lub używa komend PowerShell.

Odbiera klucz prywatny, który skonfigurowałem w $ home / .ssh / w formacie openssh i może ktoś może to potwierdzić. Wydaje się, że to openssh.

Aby było jeszcze lepiej, zintegrowałem go z moim zwykłym profilem PowerShell, wykonując następujące czynności w moim profilu $. Oznacza to, że nie muszę używać skrótu github.

. (Resolve-Path "$env:LOCALAPPDATA\GitHub\shell.ps1") . (Resolve-Path "$env:LOCALAPPDATA\GitHub\PoshGit_*\profile.example.ps1")


1

Posh-SSH to darmowy moduł z Poswershell Magazine, który działa dla Powershell 3.0 i nowszych wersji.

Jest dostępny na stronie http://www.powershellmagazine.com/2014/07/03/posh-ssh-open-source-ssh-powershell-module/

Pełna dokumentacja znajduje się pod linkiem powyżej. W skrypcie tak naprawdę nie chcesz połączeń interaktywnych, więc są to dwa kroki. 1. utwórz sesję. 2. wysyłanie poleceń.

$ServerConnection = New-SSHSession -KeyFile $keyLocation -ComputerName $sshComp -Credential $mycreds -AcceptKey

Pierwsza utworzona sesja będzie miała indeks 0.

Invoke-SSHCommand -Index 0 -Command "some command to run over ssh"

Najlepszą praktyką jest umieszczenie tworzenia połączenia w try catch i sprawdzenie, czy sesja istnieje przed uruchomieniem polecenia. To sprawia, że ​​interakcja z serwerami Linux z poziomu skryptu PowerShell działa dobrze.


-2

SSH i SFTP stanowią niewątpliwie standard branżowy w zakresie bezpiecznych aplikacji do zdalnego dostępu. Na szczęście możliwe jest, że nawiązanie połączenia może być naprawdę szybkie i łatwe. Niestety prawda jest taka, że ​​istnieje wiele możliwości marnowania czasu na rozwiązywanie problemów.

Niestety system Windows nie ma na pokładzie standardowego klienta ssh ani oprogramowania deamon.

Powoduje to zoo mniej lub bardziej dziwacznych implementacji, open source, freeware, shareware i tak dalej ... czasem coś nie działa.

W oknach jest to kwestia pieniędzy. Microsoft po prostu nie chce, aby wielu użytkowników łatwo łączyło się z 1 lizenizowanym komputerem. Chcą sprzedawać własne rozwiązania. Więc nie oferują natywnego ssl.

cygwin to najlepsze dostępne rozwiązanie.

putty / plink / winscp jako oprogramowanie klienckie. jest również w porządku dla skryptów.

istnieją diagramy ssh do integracji z systemem Windows, ale rozwiązania są mniej lub bardziej niestabilne.

najbardziej stabilnym sposobem na uruchomienie ssh deamon przy uruchamianiu windwos jest uruchomienie go w maszynie wirtualnej systemu Linux, co można zrealizować przy niewielkiej dystrybucji linuksa.


4
To tak naprawdę nie odpowiada na pytanie PO. Czy możesz edytować swoje pytanie, aby wskazać, dlaczego cygwin jest rozwiązaniem pytania postawionego przez PO?
Mówię: Przywróć Monikę

OP nie prosi o alternatywy inne niż rozwiązania związane z PowerShell.
szczegółowooi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.