1

Я пытаюсь сделать следующее:

1) Запустите сценарий оболочки на удаленной машине 1,2 и 3 (все Linux) с машины Windows.

2) На моей Windows-машине у меня есть plink, который я использую следующим образом:

plink -i <my_private_key> user@machineX.com -t "bash <script_loc> args &"

Когда я это делаю, ожидаемый процесс не начинается. Я подтвердил это удаленным входом в machineX(1,2, or3) и набрав:

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

Я могу запустить его в командной строке, набрав:

cmd /c start plink -i <my_private_key> user@machineX.com -t ""bash <script_loc> args ""&""""

но это означает, что он откроет новый терминал, и после выхода из системы Windows они будут прерваны.

Моя цель - удаленно запускать эти сценарии и поддерживать их в качестве фоновых процессов или демонов. Я буду в состоянии найти pid и т.д., Так как я знаю, что они будут запускаться через командную строку.

Это выполнимо без создания службы?

С Уважением,

2 ответа2

1

Если вы используете plink, то вы не используете PS remoting для этого, поскольку вы просто запускаете команду plink на одном из хостов PS (console / ISE / VSCode). Это не проблема PS, а как запустить и запустить в PS. Я ежедневно подключаюсь к Linux-системам без проблем, но, как вы уже заметили во второй команде, проблема с командой start.

Если вы находитесь в одной из консолей PS, вам нужно предоставить команду выполнения, а для внешнего .exe-файла вы должны привыкнуть полностью определять исполняемый файл.

Например, вот как я делаю это успешно со всеми моими Linux-блоками. Это & (амперсанд) означает - Выполнить строку как команду. В основном то же самое, что вы делаете, вызывая cmd.exe start, но без дополнительного окна терминала.

# 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

Если вы хотите, чтобы все работало в фоновом режиме, это то, для чего нужны задания PS.

Смотрите эту статью:

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

См. Также информацию о файле справки PS относительно параллельных процессов и пространств выполнения.

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

Начало использования пространств выполнения PowerShell

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

Я, однако, не пробовал это с Plink.

Но есть много статей, касающихся случаев использования PS и Plink, даже для коммутаторов Cisco.

Трюки SSH PowerShell с помощью plink.exe

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

Пример модуля PowerShell для управления хостами Linux с поддержкой SSH с использованием SMA

Это пример модуля Windows PowerShell для управления хостами Linux с поддержкой SSH. Он оборачивает инструмент Putty Plink.exe для выполнения команд SSH.

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

И, что примечательно, PS имеет модуль SSH, поэтому вам не нужно специально использовать Plink для взаимодействия с клиентами Linux.

Использование SSH с PowerShell

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

Шикарный SSH 2.0.2

Обеспечение функциональности SSH и SCP для выполнения команд на удаленных хостах.

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

0

Вам просто нужен удаленный скрипт, который разветвляет и записывает PID-файл.

Есть много способов сделать это.

Какой клиент вы используете (plink, putty, ssh или любой другой) не имеет значения.

Пока:

  1. У вас есть права на запуск скрипта.
  2. Возможность запуска скрипта.
  3. Разрешения для всего в сценарии.

Я не пробовал это точно, но вот пример, который я нашел в 0,5-минутной сессии Google.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .