要远程访问 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
取决于您。