如何将 SSH 隧道命令变成 Windows 10 上的服务?

How can I make a SSH tunnel command into a service on Windows 10?

我在 powershell 中有一个非常简单的命令来启动 SSH 隧道:

ssh -N -L 28777:localhost:28778 myapp-db

使这项服务成为一项服务的最简单方法是什么,这样我就可以 运行:

start-service db-tunnel

等 Windows 10?我读过一篇关于这样做的 old article,它涉及到使用 C#,这对于这样一个简单的任务来说似乎太复杂了。

要将某些东西变成服务,您需要将脚本编译成可执行文件。这可以通过 PS2EXE 完成。

在 powershell 中创建一个函数,Start-DbTunnel,并在启动时将该函数导入到您的 powershell 会话中,这对您同样有效。您可以通过在以下路径中加载函数来完成此操作:

$PSprofilePath\Microsoft.PowerShell_profile.ps1

或 ISE

$PSprofilePath\Microsoft.PowerShellISE_profile.ps1

在这些文件中,我有

$PSprofilePath = "C:\Users\cknutson\Documents\WindowsPowershell"
$items = Get-ChildItem "$PSprofilePath\functions"
#Set-Location "$PSprofilePath\functions"
$items | ForEach-Object {
    . $_.FullName
}

Set-Location C:\

每次打开 powershell 主机时,任何包含函数或其他内容的脚本都会 运行。

不需要 PowerShell。这是一种方法:

  1. 在某处安装 Windows Server 2003 Resource Kit Tools 软件包并获取文件 instsrv.exesrvany.exe.

  2. 使用 srvany.exe 使用 Microsoft 帮助文章 137890.

    [ 中的信息使用 ssh.exe 程序及其参数创建服务=50=]

例如:

instsrv "SSH Server" "C:\Program Files (x86)\Resource Kit Tools\srvany.exe"

当然,指定您想要的任何服务名称以及 srvany.exe 的路径和文件名。

接下来,使用注册表编辑器转到注册表中的 HKLM\SYSTEM\CurrentControlSet\Services\SSH Tunnel(或您为服务命名的任何名称)并创建一个 Parameters 子项。在 Parameters 子项中创建一个 Application 值(REG_SZ 类型):

C:\Program Files (x86)\ssh\ssh.exe

(或其他 - 您的 ssh 可执行文件的路径和文件名)。

您还可以创建值 AppDirectory (REG_SZ) 来指定可执行文件的起始目录,并创建 AppParameters (REG_SZ) 来指定参数可执行文件;例如:

-N -L 28777:localhost:28778 myapp-db

如果您更喜欢 BenH 在他的评论中提到的 NSSM 工具并且可以使用第三方软件,则可以替代该工具。