Windows-na-Linux: Wykonaj skrypt powłoki jako proces użytkownika (jako bkgrnd) na zdalnych komputerach

1

Próbuję wykonać następujące czynności:

1) Uruchom skrypt powłoki na zdalnym komputerze 1,2 i 3 (wszystkie Linux) z komputera z systemem Windows.

2) Na moim komputerze z systemem Windows mam łącze, którego używam w następujący sposób:

plink -i <my_private_key> [email protected] -t "bash <script_loc> args &"

Gdy to zrobię, oczekiwany proces nie rozpoczyna się. Potwierdziłem to, logując się zdalnie na maszynie X (1,2 lub 3) i wpisując:

ps -A -F | grep -i "whatever"

Mogę go uruchomić w wierszu polecenia, wpisując:

cmd /c start plink -i <my_private_key> [email protected] -t ""bash <script_loc> args ""&""""

ale oznacza to, że otworzy nowy terminal, a po wylogowaniu z komputera z systemem Windows zostaną one zakończone.

Moim celem jest zdalne uruchomienie tych skryptów i utrzymanie ich działania jako procesów w tle lub demonów. Będę mógł znaleźć pid itp., Ponieważ wiem, co będą uruchamiane za pomocą wiersza poleceń.

Czy jest to wykonalne bez tworzenia usługi?

Pozdrowienia,

hagubear
źródło

Odpowiedzi:

1

Jeśli korzystasz z Plink, to nie używasz do tego celu PS, ponieważ po prostu uruchamiasz polecenie Plink na jednym z hostów PS (konsola / ISE / VSCode). To nie jest problem z PS, ale jak uruchomić i exe w PS. Codziennie podskakuję do Linux-a bez problemów, ale jak zauważyłeś w drugim poleceniu i problemie z poleceniem uruchomienia.

Jeśli korzystasz z jednej z konsol PS, musisz podać polecenie wykonania, a dla zewnętrznego pliku .exe powinieneś przyzwyczaić się do pełnego kwalifikowania exe.

Na przykład tutaj, w jaki sposób robię to z powodzeniem dla wszystkich moich urządzeń Linux. To, że & (ampersand) oznacza - Wykonaj ciąg jako polecenie. Zasadniczo uruchamia się to samo, wywołując program cmd.exe, ale bez dodatkowego okna terminala.

# Using PowerShell and Plink for Linux remote management
# Example
$PlinkPath = 'D:\Tools\plink.exe'

$linuxhostname = 'SomeLinuxHostName'
$linuxusername = 'SomeLinuxUserName'
$LinuxSessionName = 'LinuxSessionNameName' # Putty Saved session name

$GetIptablesNat = & $PlinkPath -load $LinuxSessionName 'sudo -s iptables -L -nv --line-numbers -t nat';$GetIptablesNat 
$GetIptablesFilter = & $PlinkPath -load $LinuxSessionName 'sudo -s iptables -L -nv --line-numbers -t filter';$GetIptablesFilter
$RestartIptablesService = & $PlinkPath -load $LinuxSessionName 'sudo -s service iptables restart';$RestartIptablesService

# Network statistics
$GetNetworkStatistics = & $PlinkPath -load $LinuxSessionName 'sudo -s netstat -tN';$GetNetworkStatistics

# Connectivity check
(
'SomeLinuxHostFQDN','SomeLinuxIPA'
) | % { Test-Connection -ComputerName $_ }


# From Linux NAT Gateway
$TestConnectivity = & $PlinkPath -load $LinuxSessionName 'sudo -s ping SomeHostIPA';$TestConnectivity

Jeśli chcesz, aby rzeczy działały w tle, po to są zadania PS.

Zobacz ten artykuł:

https://codingbee.net/tutorials/powershell/powershell-running-tasks-in-the-background

Zobacz także informacje o pliku pomocy PS dotyczące równoległych procesów i Runspaces.

Get-Help -Name about_Jobs
Get-Help -Name about_Parallel
Get-Help -Name about_PSSessions
Get-Help -Name about_PSSession_Details
Get-Help -Name about_Workflows
Get-Help -Name about_WorkflowCommonParameter

Rozpoczęcie korzystania z obszarów roboczych PowerShell

https://blogs.technet.microsoft.com/heyscriptingguy/2015/11/26/beginning-use-of-powershell-runspaces-part-1

Jednak nie próbowałem tego z Plink.

Istnieje jednak wiele artykułów dotyczących przypadków użycia PS i Plink, nawet dla przełączników Cisco.

Sztuczki SSH PowerShell z plink.exe

http://www.virtu-al.net/2013/01/07/ssh-powershell-tricks-with-plink-exe

Przykładowy moduł PowerShell do zarządzania hostami Linux z włączonym SSH za pomocą SMA

To jest przykładowy moduł Windows PowerShell do zarządzania hostami Linux obsługującymi SSH. Pakuje narzędzie Putty.exe Plink.exe w celu wykonywania poleceń SSH.

https://gallery.technet.microsoft.com/scriptcenter/Sample-PowerShell-module-8d961a1c

Warto zauważyć, że PS ma moduł SSH, więc nie musisz używać Plink specjalnie do współpracy z klientami Linux.

Używanie SSH z PowerShell

https://www.thomasmaurer.ch/2016/04/using-ssh-with-powershell

Posh-SSH 2.0.2

Zapewniają funkcje SSH i SCP do wykonywania poleceń na zdalnych hostach.

https://www.powershellgallery.com/packages/Posh-SSH/2.0.2

postanote
źródło
Dzięki. Próbuję sprawdzić, czy zrobienie z tego jednostki systemowej pomaga ... Ale wygląda na to, że twoje rozwiązanie zacznie działać, jeśli moja maszynaX będzie blackboxowana.
hagubear,
0

Potrzebujesz tylko zdalnego skryptu, który wyświetla i zapisuje plik PID.

Istnieje wiele sposobów, aby to zrobić.

Jaki klient użyjesz (plink, kit, ssh lub cokolwiek innego) nie będzie miał znaczenia.

Tak długo jak:

  1. Masz prawo do uruchomienia skryptu.
  2. Możliwość uruchomienia skryptu.
  3. Uprawnienia do wszystkiego w skrypcie.

Nie próbowałem tego dokładnie, ale oto przykład, który znalazłem podczas 0,5-minutowej sesji Google.

svin83
źródło