来自 Windows 的 SSH 隧道作为后台进程?
SSH Tunnel from Windows as a background process?
在 Windows 服务器上,我们有一个工作的 OpenSSH SSH 隧道到我们的 MySQL 数据库:
ssh -l <USER> -i <PUBLIC_KEY_FILE> -L 127.0.0.1:3306:localhost:3306 <SERVER_IP>
我们需要编写脚本:
- 将隧道设置为后台进程
- 在前台进程中做一些事情,包括但不限于从数据库加载数据到本地Windows机器
- 然后关闭后台 ssh tunnel/process 一旦前台的东西已经完成
我们该怎么做?
使用 cmd/.bat,我们通过在单独的 cmd 中启动 ssh 来实现前两点:
https://docs.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
然后我们可以做我们的工作部分,但是我们还没有想出如何关闭那个混凝土隧道,而不杀死所有 运行 ssh.exe 进程。我们不想杀死所有的人。
有什么办法吗?
然后我们想到了Powershell:
Start-Job -Name "RUN_SSH_TUNNEL_X1" -ScriptBlock {ssh...
...stuff...
Stop-Job -Name "RUN_SSH_TUNNEL_X1"
但这似乎不起作用,作业"RUN_SSH_TUNNEL_X1"似乎在启动后立即停止,因此隧道不会停留。
有没有什么方法可以让工作继续进行并 运行 在我们的内容部分完成后关闭它?
还是应该用其他方法完成?注意!不想使用 Putty 等第三方工具
我们在 bat 文件中留下了隧道创建。
然后从 Powershell 检查 运行ning 任务 运行 语句以检查 SSH 隧道是否为 created/running。如果没有则调用隧道创建bat文件。
工作完成后调用相同的 SSH 隧道任务检查,如果是 运行ning,则终止任务。
在 Windows 服务器上,我们有一个工作的 OpenSSH SSH 隧道到我们的 MySQL 数据库:
ssh -l <USER> -i <PUBLIC_KEY_FILE> -L 127.0.0.1:3306:localhost:3306 <SERVER_IP>
我们需要编写脚本:
- 将隧道设置为后台进程
- 在前台进程中做一些事情,包括但不限于从数据库加载数据到本地Windows机器
- 然后关闭后台 ssh tunnel/process 一旦前台的东西已经完成 我们该怎么做?
使用 cmd/.bat,我们通过在单独的 cmd 中启动 ssh 来实现前两点: https://docs.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
然后我们可以做我们的工作部分,但是我们还没有想出如何关闭那个混凝土隧道,而不杀死所有 运行 ssh.exe 进程。我们不想杀死所有的人。 有什么办法吗?
然后我们想到了Powershell:
Start-Job -Name "RUN_SSH_TUNNEL_X1" -ScriptBlock {ssh...
...stuff...
Stop-Job -Name "RUN_SSH_TUNNEL_X1"
但这似乎不起作用,作业"RUN_SSH_TUNNEL_X1"似乎在启动后立即停止,因此隧道不会停留。 有没有什么方法可以让工作继续进行并 运行 在我们的内容部分完成后关闭它?
还是应该用其他方法完成?注意!不想使用 Putty 等第三方工具
我们在 bat 文件中留下了隧道创建。
然后从 Powershell 检查 运行ning 任务 运行 语句以检查 SSH 隧道是否为 created/running。如果没有则调用隧道创建bat文件。
工作完成后调用相同的 SSH 隧道任务检查,如果是 运行ning,则终止任务。