如何在本地主机上提供 API 并通过 ssh 访问它

问题描述 投票:0回答:1

我这方面的经验为零。

我正在尝试在本地计算机中创建一个 API,并从 SSH 调用该 API

服务器.py:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/", methods=["GET"])

def get_info():
    return jsonify({"data": "hi"})
    # from openai import OpenAI


if __name__ == "__main__":
    app.run(debug=True)

这是 SSH 机器上的 client.py。

编辑:我的意思是。

server.py
是在本地主机上创建的。和
client.py 
(另一个项目)是在 SSH 上创建的(据我所知是远程机器)。虽然两者都是使用我的机器创建的。

import requests
import json
import socket
# request = b"GET / HTTP/1.1\nHost: www.cnn.com\n\n"
s = socket.socket()
s.connect(("127.0.0.1",5000))
s.sendall(b"GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n")
print(s.recv(1024))

url = 'http://localhost:5000'

response = requests.get(url)
print(response)

# print(str(response))
# print('')
# print(json.dumps(response.json(), indent=4))

抱歉,我对套接字一无所知,我只是按照互联网上的一些代码进行操作,但它不起作用。

谢谢你。

编辑:在 SSH 上运行

client.py
时。我收到错误结果


b'HTTP/1.1 404 Not Found\r\nTransfer-Encoding: chunked\r\nDate: Mon, 16 Sep 2024 08:44:33 GMT\r\nServer: Warp/3.3.17\r\n\r\n0\r\n\r\n'
<Response [404]>

我也关注了这个。但不起作用:

选项 2:使用 SSH 隧道(端口转发)

如果本地 API 绑定到

localhost
并且您不想公开公开它,则 SSH 隧道是更安全的选择。

2.1 保持 API 绑定到
localhost

在本地计算机上正常启动 API,并将其绑定到

localhost
。例如:

flask run --host=127.0.0.1 --port=5000
ssh -L 4032:localhost:5000 [email protected]
curl http://localhost:5000

测试(站在远程机器上):

import requests
requests.get("http://127.0.0.1:4032")

-> <Response [404]>

import requests
requests.get("http://localhost:4032")

-> <Response [404]>

import requests
requests.get("http://localhost:5000")

-> <Response [404]>
python ssh localhost ssh-tunnel
1个回答
0
投票

好吧,我已经想通了。原来我站在错误的一边打电话给隧道。

我必须站在本地机器上运行

ssh -R 8080:localhost:5000 user@remote_server

https://www.ssh.com/academy/ssh/tunneling-example

© www.soinside.com 2019 - 2024. All rights reserved.