我在 Linux 上有一个命令行应用程序,它使用特定端口与远程服务器通信。不幸的是,在工作中,该端口被阻止了。
我能够通过 VNC 将笔记本电脑连接到网络,并且笔记本电脑处于 WiFi 连接状态,该连接具有对远程服务器的端口访问权限。连接后,我能够从安全网络通过 ssh 连接到我的笔记本电脑。
有没有办法使用 ssh 端口隧道来解决这个问题?我可以将端口隧道连接到我的笔记本电脑,并让我的笔记本电脑充当防火墙网络和远程服务器之间的中间人吗?
Firewalled Linux Box ---ssh---> Mac OSX Laptop ---wifi---> Remote Server
一些细节:
- 该命令行应用程序是 pip 的包装器。命令行没有指定代理或备用 IP/服务器供其使用的选项。
- 据我了解,Pip 可能正在与许多不同的服务器通信,但最有可能是 pypi.python.org。
- 根据我找到的资料,Pip 通过端口 3128 进行通信
我尝试了以下方法:
ssh -v -f -4 -N -L 3128:pypi.python.org:3128 [email protected]
(xx.x.xx.xxx 代表笔记本电脑的 IP 地址)
当它运行时,它会显示:
Remote connections from LOCALHOST:3128 forwarded to local address pypi.python.org:3128
在我看来这似乎有点倒退,但我是新手,所以谁知道呢!不管怎样,它似乎不起作用。仅供参考,作为测试,我使用:
telnet pypi.python.org 3128
检查防火墙保护的机器现在是否有访问权限,但是没有。
有什么想法吗?
答案1
一般注意事项:将安全网络与不安全网络绑定在一起并非严格意义上的技术问题。它可能会导致您被解雇或更糟的情况。获取上链许可。
技术方面:
去完成:
telnet pypi.python.org 3128
您将需要修改 /etc/hosts 文件以将“pypi.python.org”作为 localhosts 行的一部分。
就我而言,通过 ssh 隧道访问远程代码存储库,以便开发工具配置保持一致(始终引用相同的主机名),即使在远程时,我只需使用类似以下示例脚本来配置主机(可以通过 cron 或手动调用)。
在使用脚本之前,请备份您的 /etc/hosts 文件。
triggerport=1234
servname="myserver"
if [ `netstat -nl | grep :631 | wc -l ` -gt 0 ]
then
awk -v serv=$servname '/127.0.0.1/ {print $0 " " serv;next} 1' /etc/hosts > /etc/hosts
else
awk -v serv=$servname '{gsub(serv,"")};1' /etc/hosts > /etc/hosts
fi
正如我所说,您可以设置一个 cron 作业来触发此脚本并自动建立隧道主机名映射。我通常只在系统到系统的连接上这样做,这些连接将根据需要建立和关闭 ssh 隧道。