当隧道SSH时,添加临时入口到主机

当我们公司的防火墙外,我使用脚本通过SSH隧道,并将我们的内部维基公开给我的OSX机器。 有没有一个命令暂时告诉OSX解决我的本地端口,当隧道build立?

我希望使用的序列是:

  1. 打开隧道ssh -f external-proxy.example -L 8001:internal-wiki.example:8000 -N
  2. [做这里]

  3. 在我的浏览器中inputURL internal-wiki.example:8000会导致它透明地查看localhost:8001

其他详情:

  • 我可以编辑/ etc / hosts,但这将是一个持久的变化。 我只想在外面使用这个
  • 我们没有使用SSL或证书。

我有一个解决scheme,把你的ssh命令包装成一个bash脚本:

 #!/bin/bash function control_c { echo -en "\n## Caught SIGINT; Clean up /etc/hosts and Exit \n" sed -i '' "/internal-wiki/d" /etc/hosts exit $? } trap control_c SIGINT trap control_c SIGTERM (sleep 5; open http://internal-wiki.example:8001 &)& echo '127.0.0.1 internal-wiki.example' >> /etc/hosts ssh -L8001:internal-wiki.example:8000 -f external-proxy.example -N 

解释:

  1. 在发布时在Control-C上执行清理的function
  2. 陷阱控制C和关机
  3. 睡觉,告诉OSX打开你的网站,避开(&符)
  4. 将条目添加到/etc/hosts
  5. 创build隧道
  6. 当你使用ctrl-c时,函数会使用瞬态入口清理/etc/hosts

我很抱歉,如果这还不够答案 ,我没有足够的代表在这里发表评论。

我认为/ etc / hosts可能是最好的select。 我不知道你的拆卸过程是什么,但是你可以添加删除/etc/hosts条目作为它的一部分。
此外,我认为端口更改将无法使用/etc/hosts解决scheme。 你能映射localhost:8000internal-wiki.example:8000吗?

然后,你可以在/etc/hosts添加127.0.1.1 internal-wiki.example这样的东西,当你像这样停止隧道的时候删除这行: sed -i '' '/127.0.1.1 internal-wiki.example/d' (当然,在运行之前一定要testing一下)。

这应该允许您在浏览器中使用http(s)://internal-wiki.example:8000

这不是一个完美的解决scheme,但更好的东西(如端口映射),我认为将需要在本地运行的HTTP代理。

为了增加和删除主机条目,Parallels如何通过主机名称来访问虚拟机。 这是添加到我的/etc/hosts而我的xu17 VM正在运行: 172.20.10.112 xu17.shared xu17 #prl_hostonly shared

当然,运行一个nginx代理可以很好地处理这个问题,但是它可能比你想要的要多一些。
netcat的一个更简单的选项可能取决于Web应用程序。

 # make fifo for second nc to transfer response back to first nc mkfifo /tmp/proxy.pipe nc -lk 8001 < /tmp/proxy.pipe | nc internal-wiki.example 8000 > /tmp/proxy.pipe 

然后当你closures隧道时,你可以杀死nc进程并删除/tmp/proxy.pipe

在Mac上运行负载均衡Web服务器,在本地主机转发和configuration为首选本地主机转发地址的wiki的实际地址之间进行平衡。

当ssh连接断开时,负载平衡器将会注意到并将您的连接指向常规wiki地址。

configuration您的Web浏览器,通过负载均衡器代理维基连接。

虽然有点大锤可以打破坚果。

名称服务(DNS,ldap,/ etc / hosts)不parsing主机名。 这种说法并不完全正确,但在这一点上的恰当解释是无关紧要和耗时的。

由于OSX使用BSD内核,我猜它也可能“借”了很多其他的代码。 nsparsing器默认从/ etc / hosts读取文件,但是可以通过设置HOSTALIASES环境variables(在你启动浏览器的shell中)在Linux和BSD上覆盖这个文件,但是只有在没有'。'时才能使用。 在名字里。 如果你可以使用没有的URL。 在名字这将解决您的问题。

或者,您可以运行一个脚本来configuration端口redirect,以将发往xxx.xxx.xxx.xxx:8000的数据包重新路由到127.0.0.1:8001,并相反地将数据包传入。 但这是一个非常糟糕的解决scheme。

或者,您可以安装squid并使用自定义urlredirect器来重写请求(如果您开始使用https,也可以使用棘手的方法)。

一个更清洁的select是通过ssh运行正确的隧道连接。 我相信这不是开箱即用的osx支持的,但是对于osx有openvpn兼容插件

如果是我,我只需设置脚本来交换主机文件,将所有stream量保留在一个端口上,并确保在启动时和ssh连接结束时交换默认configuration。