web-dev-qa-db-ja.com

WindowsからLinuxへ:リモートマシンでユーザープロセスとして(bkgrndとして)シェルスクリプトを実行します

私は次のことをしようとしています:

1)Windowsマシンからリモートマシン1、2、および3(すべてLinux)でシェルスクリプトを実行します。

2)私のWindowsマシンには、次のように使用しているplinkがあります。

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

そうすると、期待したプロセスが開始されません。 machineX(1,2、or3)にリモートログインして、次のように入力することで確認しました。

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

コマンドラインで次のように入力して起動できます。

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

ただし、これは新しいターミナルを開き、Windowsマシンからログオフすると、これらは終了することを意味します。

私の目標は、これらのスクリプトをリモートで開始し、バックグラウンドプロセスまたはデーモンとして実行し続けることです。コマンドラインから何が実行されるかがわかっているので、pidなどを見つけることができます。

これはサービスを作成せずに実行できますか?

よろしく、

1
hagubear

Plinkを実行している場合は、PSホストの1つ(console/ISE/VSCode)でplinkコマンドを実行しているだけなので、これを行うためにPSリモーティングを使用していません。これはPSの問題ではありませんが、PSで実行および実行する方法です。私は問題なくLinuxボックスに毎日plinkしますが、2番目のコマンドとstartコマンドの問題で述べたように。

PSコンソールの1つを使用している場合は、実行コマンドを指定する必要があります。外部.exeの場合は、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でこれを試していません。

ただし、Ciscoスイッチの場合でも、PSとPlinkの使用例に関する記事はたくさんあります。

Plink.exeを使用したSSHPowerShellのトリック

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

SMAを使用してSSH対応のLinuxホストを管理するためのサンプルPowerShellモジュール

これは、SSH対応のLinuxホストを管理するためのサンプルのWindowsPowerShellモジュールです。これは、SSHコマンドを実行するためにPuTTYツールPlink.exeをラップします。

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

また、PSにはSSHモジュールがあるため、Linuxクライアントと相互運用するためにPlinkを特別に使用する必要はありません。

PowerShellでSSHを使用する

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

Posh-SSH 2.0.2

リモートホストに対してコマンドを実行するためのSSHおよびSCP機能を提供します。

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

1
postanote

必要なのは、PIDファイルをフォークして書き込むリモートスクリプトだけです。

これを行うには多くの方法があります。

どのクライアントを使用するか(plink、PuTTY、ssh、またはこれまでに何でも)は関係ありません。

限り:

  1. スクリプトを実行する権限があります。
  2. スクリプトを実行する機能。
  3. スクリプト内のすべての権限。

私はこれを正確に試したことがありませんが、 ここに例があります 0.5分のGoogleセッションで見つけました。

0
svin83