当我们公司的防火墙外,我使用脚本通过SSH隧道,并将我们的内部维基公开给我的OSX机器。 有没有一个命令暂时告诉OSX解决我的本地端口,当隧道build立?
我希望使用的序列是:
ssh -f external-proxy.example -L 8001:internal-wiki.example:8000 -N [做这里]
在我的浏览器中inputURL internal-wiki.example:8000会导致它透明地查看localhost:8001
其他详情:
我有一个解决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
解释:
/etc/hosts /etc/hosts 我很抱歉,如果这还不够答案 ,我没有足够的代表在这里发表评论。
我认为/ etc / hosts可能是最好的select。 我不知道你的拆卸过程是什么,但是你可以添加删除/etc/hosts条目作为它的一部分。
此外,我认为端口更改将无法使用/etc/hosts解决scheme。 你能映射localhost:8000到internal-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。