Firslty我的设置是Ubuntu笔记本电脑和ubuntu服务器.
我的本地笔记本电脑上有一个程序需要访问某个网络服务,(我们称之为http://someserver.com/someservice123).现在这个服务有一个防火墙,只允许从我服务器的IP访问.
我的笔记本电脑和服务器之间是否可以使用某种类型的SSH隧道,以便当我的笔记本电脑上的python脚本向http://someserver.com/someservice123发送请求时,该服务会看到来自我服务器IP的请求?
我知道它看起来像:
ssh -N -R 80:localhost:80 user@myserver
但我不确定.
解决方法
你想要的不是反向隧道而是常规隧道.
ssh -L 80:someserver.com:80 user@myserver
这将在您的笔记本电脑的端口80(localhost)上创建一个侦听套接字,该套接字将通过myserver上的SSH服务器发送到someserver.com.
我通常将隧道与选项-CfN相结合,-C将启用压缩(加快速度),-f在验证完成后将SSH发送到后台(因此,如果需要,您仍有机会输入密码),– -N将确保在SSH服务器上没有执行任何命令(在后台运行SSH是不安全的,可以假设使用向服务器发送命令,这有点健康的偏执/良好做法).
如果您不关心在笔记本电脑和myserver之间建立非常安全的连接,您也可以快速更改密码,例如使用-c blowfish或arcfour128(更快)的blowfish.
所以我会用它:
ssh -CfNc arcfour128 -L 80:someserver.com:80 user@myserver
这将为您提供直接进入后台的漂亮,快速的隧道,而不是在您的服务器上留下打开的命令提示符.
请记住,如果您将其发送到后台,当您想要打破隧道时,您必须首先通过执行类似ps -ef |来找到进程ID. grep ssh并杀死正确的进程ID.