如何在 Python 中使用 SSH 连接从远程主机发送 HTTP GET 请求?
How to send HTTP GET request from remote host using SSH connection in Python?
我正在使用与 Paramiko 的 SSH 连接。
我的代码:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=remote_host, username=remote_user, password=remote_password,
port=remote_port)
如何从连接的远程主机发送 HTTP GET
请求(像代理一样使用)?
我根据答案找到了解决方案:
with SSHTunnelForwarder(
ssh_address_or_host=(remote_host, remote_port),
ssh_username=remote_user,
ssh_password=remote_password,
remote_bind_address=("www.python.org", 80),
) as tunnel:
conn = http.client.HTTPConnection("127.0.0.1", port=tunnel.local_bind_port)
conn.request("GET", '/')
有两种选择:
外部工具
使用 SSH 服务器上可以发送 HTTP 请求的任何可用工具。例如。 curl
或 wget
:
curl https://www.example.com/
并使用 Paramiko 执行它:Python Paramiko - Run command
此解决方案更简单,但依赖于命令 — 因此它也依赖于平台。
端口转发
将本地端口转发到远程 HTTP 服务器端口 80,并使用本地 Python 代码连接到转发的端口。
您会发现很多如何转发数据库端口的示例。就像这个:Enable Python to Connect to MySQL via SSH Tunnelling
在你的情况下,你需要做同样的事情,而不是使用数据库客户端连接到转发端口,而是连接一个 HTTP 客户端(如 HTTPConnection
)。
同样在大多数情况下,数据库转发通常在 SSH 服务器本身结束 (localhost
/127.0.0.1
),而您还想进一步连接。
这个解决方案比较复杂,但是没有外部依赖——所以它是平台无关的。另一方面,端口转发是一种特殊权限,可能在服务器上受到限制(但通常不是)。在尝试实施之前,您可以使用 SSH 客户端对其进行测试。
我正在使用与 Paramiko 的 SSH 连接。 我的代码:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=remote_host, username=remote_user, password=remote_password,
port=remote_port)
如何从连接的远程主机发送 HTTP GET
请求(像代理一样使用)?
我根据答案找到了解决方案:
with SSHTunnelForwarder(
ssh_address_or_host=(remote_host, remote_port),
ssh_username=remote_user,
ssh_password=remote_password,
remote_bind_address=("www.python.org", 80),
) as tunnel:
conn = http.client.HTTPConnection("127.0.0.1", port=tunnel.local_bind_port)
conn.request("GET", '/')
有两种选择:
外部工具
使用 SSH 服务器上可以发送 HTTP 请求的任何可用工具。例如。 curl
或 wget
:
curl https://www.example.com/
并使用 Paramiko 执行它:Python Paramiko - Run command
此解决方案更简单,但依赖于命令 — 因此它也依赖于平台。
端口转发
将本地端口转发到远程 HTTP 服务器端口 80,并使用本地 Python 代码连接到转发的端口。
您会发现很多如何转发数据库端口的示例。就像这个:Enable Python to Connect to MySQL via SSH Tunnelling
在你的情况下,你需要做同样的事情,而不是使用数据库客户端连接到转发端口,而是连接一个 HTTP 客户端(如 HTTPConnection
)。
同样在大多数情况下,数据库转发通常在 SSH 服务器本身结束 (localhost
/127.0.0.1
),而您还想进一步连接。
这个解决方案比较复杂,但是没有外部依赖——所以它是平台无关的。另一方面,端口转发是一种特殊权限,可能在服务器上受到限制(但通常不是)。在尝试实施之前,您可以使用 SSH 客户端对其进行测试。