我有一个命令行应用程序,用于连接到端口1234
上的远程设备。我无法更改端口号,并且我无权访问源以重建此工具。我目前正在一个实验室工作,除SSH之外的所有端口都被阻止。为了解决这个问题,我创建了一个隧道,即:
ssh -L 1234:remotehost:1234 sshuser@remotehost
现在,我可以将我的CLI程序指向localhost:1234
,以便将我的CLI工具连接到所需的主机。
这个CLI工具需要运行大约一个小时,我有大约200个远程主机来测试它。我想并行完成这项任务。不幸的是,我只能使用端口1234
在我的本地机器上创建一个隧道。
是否有(简单/简单/自动)方式来监视/沙箱我的CLI工具,以便我可以并行启动100个实例(即通过shell脚本),以便每个实例“认为”它正在与端口1234
交谈?例如,Docker或KVM是否提供了我可以快速设置的某种匿名/按需计算节点功能?我宁愿不必通过vagrant手动部署和管理大量的VirtulBox主机。
简单的答案是您可以在本地使用多个IP地址。客户端上的每个本地IP地址都允许您创建另一个隧道。目前,您正在使用localhost。但是您的客户端也有IP地址。您可以通过尝试以下语法来证明我的观点:
ssh -f -N -L 127.0.0.1:1234:remotehost1:1234 sshuser@remotehost1 # this is default
ssh -f -N -L <local-IP1>:1234:remotehost2:1234 sshuser@remotehost2 # specifying non-default value <local-IP1>
现在,您只需要弄清楚如何为您的客户端提供多个IP地址(辅助地址)。然后你可以扩展到2个并行会话。
我还在你的ssh语法中添加了-f和-N,将ssh放入后台(-f)并且不发出任何命令。
在过去使用-R隧道,我发现我需要在服务器上启用GatewayPorts(/ etc / ssh / sshd_config)。在-L的情况下,我认为没有必要。但是,ssh man-page明确提到了与-L函数关联的GatewayPorts。你可能需要玩一下。我只是在我的Mac上尝试了这一点,并且我能够在没有任何GatewayPorts考虑的情况下实现它。