如何解决如何在Python中使用SSH连接从远程主机发送HTTP GET请求?
我正在使用与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客户端对其进行测试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。