ssh 隧道和 rdesktop 在一行中

ssh 隧道和 rdesktop 在一行中

要远程访问 Windows 计算机,我必须通过我的 ubuntu 服务器建立隧道。要设置隧道,我必须

ssh -l root -C -L 9999:windowsmachine:23389 myserver

然后我必须打开另一个控制台并运行

rdesktop -u user -password -f localhost:9999

我怎样才能将它们组合到一个命令或脚本中?

答案1

免责声明:请参阅评论以获得更有效的解决方案。)

这很棘手,原因如下:

  • ssh需要在前台运行以保持连接打开。这使得在单个 shell 实例中执行此操作具有挑战性,因为第二个命令需要与它在前台并行执行。
  • 您无法测试ssh命令的返回状态,因为到那时连接已经关闭。这意味着无论 ssh 身份验证是否成功,resktop 命令都会触发。
  • 为了使rdesktop命令不具有交互性,它需要在命令行中提供密码。将密码存储在脚本中不是一个好主意。

尝试这样的操作:

#!/bin/bash

# Request password, no echo
read -s RDP_PW

# Insert password validation here (i.e. make sure we got input)

# Execute sleep+rdesktop in a background subshell, redirect STDOUT to /dev/null.
( sleep 5; rdesktop -u user -p$RDP_PW -f localhost:9999 ) >/dev/null &

# Run the ssh command. We have 5 seconds establish the tunnel.
ssh -l root -C -L 9999:windowsmachine:23389 myserver

根据需要调整 sleep 语句。您可能需要删除 /dev/null 重定向,直到您确定这有效为止。您可能还想重定向 STDERR。

更好的方法取决于您在 X 中使用的终端程序,或者您是否熟悉终端多路复用器。如果您的终端程序为您提供了在新选项卡中调用命令的方法,请在ssh执行该操作时加上适当的命令前缀。如果您使用多路复用器,请使用ssh在新多路复用器窗口中调用的语法。在这两种情况下,处理密码提示都ssh取决于您。

相关内容