Windows 伺服器上的 SSH 登出後進程終止

Windows 伺服器上的 SSH 登出後進程終止

我有一個Windows 伺服器 2016需要遠端執行使用 cli 的檔案的機器使用SSH

眾所周知,登出 SSH 連線會終止 ssh 使用者啟動的進程。在 Linux 機器上,可以使用諸如nohup或 之類的解決方案screen,導致進程在登出後不會被終止。

不過,此類解決方案不適用於 Windows 計算機,我正在尋找一種方法來防止進程在登出後終止。

  • 我的客戶是一個Ubuntu機器
  • 我的 Windows Server 2016 運行開放式SHH, 和電源外殼作為預設 shell
  • 我的程式設定為在守護程式模式下工作,並且沒有 cmd 或 powershell 視窗保持開啟狀態
  • 使用Get-Process -Name proc_name顯示進程確實正在運行
  • Get-ProcessSSH 註銷後使用不會產生這樣的過程

我也嘗試過的事情:

  • 使用運行該.exe檔案cmd
  • 運行 a.bat和文件,以參數.ps開始。.exe

有沒有辦法在Windows機器上解決這個問題?

答案1

在花費大量時間尋找解決方案後,我找到了使用 PowerShell 執行此操作的絕對正確方法。

它似乎是在線使用或記錄較少的 cmdlet 之一,並且幾乎不可能使用 MSDN 文件自行弄清楚,除非您已經非常熟悉Wmi Objects.

簡而言之:

假設我有一個程式foo.exe需要在後台運行參數-a,-bbar,我應該使用確切的命令:

Invoke-WmiMethod -Path 'Win32_Process' -Name Create -ArgumentList 'C:\Users\foo\Desktop\foo.exe -a -b bar'

當然,如果您的 exe 是「已知」exe(預設情況下,例如記事本或 ping)或由您添加,則在使用時不需要完整路徑,-ArgumentList並且exe 名稱就足夠了(記事本、ping 等) 。

附加參數:

Invoke-WmiMethod支援附加參數,例如-Credential, (一種在遠端電腦上-ComputerName使用本機 PS 而不使用 SSH 的好方法),以及許多Invoke-Impersonation更多記錄在這裡

Cmdlet 語法說明和其他 cmdlet 工具:

  • 論證-Path指向一個WmiObject名字。有許多WmiObjects,每個都有許多MethodsProperties
  • 參數-Name指導所使用的Method.
  • 列出所有可用的Wmi-Objects用途Get-WmiObject -List(透過這種方式很難找到所需的物件)。
  • 列出並查看所有可用Win32_Process MethodsProperties使用
Get-WmiObject -List |where{$_.name -match '^Win32_Process$'}

這將傳回此結構的輸出:

   NameSpace: ROOT\cimv2

Name                                Methods              Properties
----                                -------              ----------
Win32_Process                       {Create, Terminat... {Caption, CommandLine, CreationClassName, CreationDate...}

當然,使用|Select-Object -ExpandProperty (_your_property_here_)將顯示所有可用的內容,Methods例如Create我們在上面的命令中使用的內容,以及所有可用的內容Properties(我們沒有使用)。

相關內容