通过 SSH 隧道使用服务器的 IP

通过 SSH 隧道使用服务器的 IP

首先,我的设置是一台 Ubuntu 笔记本电脑和一台 Ubuntu 服务器。

我的本地笔记本电脑上有一个程序需要访问某个网络服务(我们称之为http://someserver.com/someservice123)。现在这个服务有一个防火墙,只允许从我的服务器的IP进行访问。

是否有某种类型的 SSH 隧道可用于我的笔记本电脑和服务器之间,以便当我笔记本电脑上的 Python 脚本向http://someserver.com/someservice123该服务是否看到来自我服务器 IP 的请求?

我知道它看起来应该是这样的:

ssh -N -R 80:localhost:80 user@myserver

但我不太确定。

答案1

你想要的不是反向隧道而是常规隧道。

ssh -L 80:someserver.com:80 user@myserver

这将在您的笔记本电脑(localhost)的端口 80 上创建一个监听套接字,该套接字将通过 myserver 上的 SSH 服务器转到 someserver.com。

我通常将隧道与选项 -CfN 结合使用,-C 将启用压缩(稍微加快速度),-f 在身份验证完成后将 SSH 发送到后台(因此您仍然有机会在需要时输入密码),-N 将确保没有在 SSH 服务器上执行任何命令(在后台运行 SSH 并不安全,假设可以使用它向服务器发送命令,这是一种健康的偏执/一种良好做法)。

如果您不关心您的笔记本电脑和 myserver 之间的连接是否非常安全,您也可以将密码更改为更快的密码,例如使用 -c blowfish 的 blowfish 或 arcfour128(速度更快)。

所以我会用的是这个:

ssh -CfNc arcfour128 -L 80:someserver.com:80 user@myserver

这将为您提供良好、快速的隧道,直接进入后台,而不是在您的服务器上留下打开的命令提示符。

请记住,如果您将其发送到后台,当您想要断开隧道时,您必须首先通过执行类似操作来找到进程 ID ps -ef | grep ssh,然后终止正确的进程 ID。

答案2

您可以使用 ssh 提供的 SOCKS 代理。通过以下方式连接

ssh -D 9999 user@myserver

然后你可以在你的python脚本中使用此SOCKS代理,如中所述如何在 urllib2 中使用 SOCKS 4/5 代理

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9999)
socket.socket = socks.socksocket

(将此代码放在脚本顶部)

答案3

我的建议是使用:

ssh -L 8080:localhost:80 用户@服务器

这样,通过将程序连接到 ,您就不会与端口 80 的特权端口发生冲突http://localhost:8080/。此外,我会使用-C压缩、-f后台运行和-N不打开终端的选项。
所以ssh -CfN -L 8080:localhost:80 user@server应该这样做


针对您的评论,请允许我引用tutorialspoint.com

一个简单的客户端:

import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 8080                # Reserve a port for your service.
s.connect((host, port))
s.close

由于您使用 Python 的方式连接网络,我假设connect()您的代码中有一个语句。

(请点击链接获取更多深入信息。);-)

相关内容