Windows 中的 SSH 隧道作为后台进程?

use*_*950 6 ssh powershell cmd openssh

在 Windows 服务器上,我们有一个到 MySQL 数据库的工作 OpenSSH SSH 隧道:

ssh -l <USER> -i <PUBLIC_KEY_FILE> -L 127.0.0.1:3306:localhost:3306 <SERVER_IP>
Run Code Online (Sandbox Code Playgroud)

我们需要编写它的脚本:

  1. 将隧道设置为后台进程
  2. 在前台进程中执行一些操作,包括但不限于将数据从数据库加载到本地 Windows 计算机
  3. 然后在前台工作完成后关闭后台 ssh 隧道/进程我们将如何做到这一点?

使用 cmd/.bat,我们通过在单独的 cmd 中启动 ssh 来实现前两点:https: //learn.microsoft.com/en-us/windows-server/administration/windows-commands/start

START ssh -l <USER> -i <PUBLIC_KEY_FILE> -L 127.0.0.1:3306:localhost:3306 <SERVER_IP> -T
Run Code Online (Sandbox Code Playgroud)

然后我们可以完成我们的工作,但我们还没有弄清楚如何关闭该具体隧道,而不杀死所有正在运行的 ssh.exe 进程。我们不想杀死他们所有人。有什么办法吗?

然后我们想到了 Powershell:

Start-Job -Name "RUN_SSH_TUNNEL_X1" -ScriptBlock {ssh...
...stuff...
Stop-Job -Name "RUN_SSH_TUNNEL_X1"
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,作业“RUN_SSH_TUNNEL_X1”似乎在启动后立即停止,因此隧道不会保持运行。有什么方法可以让工作继续运行并在我们的工作完成后关闭它吗?

或者应该用其他方法来完成?注意!不想使用 Putty 等第三方工具。

use*_*950 2

我们将隧道创建保留在 bat 文件中。

然后从 Powershell 检查正在运行的任务运行语句以检查 SSH 隧道是否已创建/正在运行。如果没有则调用隧道创建bat 文件。

一旦工作完成,就会调用相同的 SSH 隧道任务检查,如果正在运行,则终止该任务。