Windows para Linux: Executa um script shell como processo do usuário (como bkgrnd) em máquinas remotas

1

Estou tentando fazer o seguinte:

1) Execute um script de shell na máquina remota 1,2 e 3 (tudo Linux) da máquina Windows.

2) Na minha máquina Windows eu tenho plink que estou usando da seguinte maneira:

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

Quando faço isso, o processo esperado não é iniciado. Confirmei isso por meio do log remoto em machineX (1,2, or3) e digitando:

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

Eu posso iniciá-lo em uma linha de comando digitando:

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

mas isso significa que ele abrirá um novo terminal e, ao efetuar o logoff da máquina Windows, eles serão encerrados.

Meu objetivo é iniciar esses scripts remotamente e mantê-los em execução como processos ou daemons em segundo plano. Eu serei capaz de encontrar pid etc. desde que eu sei o que eles estarão executando via linha de comando.

Isso é factível sem criar um serviço?

Atenciosamente,

    
por hagubear 10.07.2018 / 18:57

2 respostas

1

Se você está rodando plink, então você não está usando o comando PS para fazer isso, já que você está apenas executando um comando plink em um dos hosts PS (console / ISE / VSCode). Este não é um problema de PS, mas sim como executar e executar no PS. Eu faço plink para caixas de Linux diariamente sem problema, mas como você notou em seu segundo comando e iniciar o problema de comando.

Se você estiver em um dos consoles PS, terá que fornecer um comando de execução e, para o .exe externo, deverá adquirir o hábito de qualificar totalmente o exe.

Por exemplo, aqui é assim que faço isso com sucesso em todas as minhas caixas Linux. Isso & (E comercial) significa - Executar string como comando. Basicamente, a mesma coisa que você está fazendo chamando cmd.exe start, mas sem a janela de terminal adicional.

# 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

Se você deseja que o material seja executado em segundo plano, é para isso que os trabalhos PS são.

See this article:

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

Veja também as informações do arquivo de ajuda do PS referentes a processos paralelos e 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

Beginning Use of PowerShell Runspaces

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

No entanto, não tentei isso com o Plink.

Mas há muitos artigos sobre casos de uso de PS e Plink, mesmo para switches da Cisco.

SSH PowerShell tricks with plink.exe

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

Sample PowerShell module for managing SSH enabled Linux hosts using SMA

This is a sample Windows PowerShell module to manage SSH enabled Linux hosts. It wraps the Putty tool Plink.exe to perform the SSH commands.

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

E ponto de nota, PS tem um módulo SSH, então você não precisa usar o Plink especificamente para interoperar com clientes Linux.

Using SSH with PowerShell

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

Posh-SSH 2.0.2

Provide SSH and SCP functionality for executing commands against remote hosts.

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

    
por 10.07.2018 / 23:52
0

Você só precisa de um script remoto que bifurque e grave um arquivo PID.

Existem MUITAS maneiras de fazer isso.

Qual cliente você usa (plink, putty, ssh ou o que quer que seja) não importa.

Contanto que:

  1. Você tem o direito de executar o script.
  2. Capacidade de executar o script.
  3. As permissões para tudo no script.

Eu não testei exatamente este, mas aqui está um exemplo que eu encontrei em um Google de 0,5 minuto sessão.

    
por 12.07.2018 / 19:55