Apache Server Python mod_wsgi Flask上的 SSH 连接



我有一个python rest API,在带有mod_wsgi的Apache服务器中启动了Flask。它打开了一些与其他机器的 ssh 连接,以发送一些信息并在那里使用它,在我之前更改了我的服务器(我让它在 Werkzeug 服务器上运行(,它工作正常。但现在它似乎有效,但是当我向我的服务器发出 get 请求时,它会冻结并且什么也不做,没有日志,没有错误,什么都没有。

初始化.py

from flask import Flask, jsonify,make_response,abort,g,request,url_for
from flask_httpauth import HTTPBasicAuth
from flask_sqlalchemy import SQLAlchemy
from flask_bson import accept_bson, bsonify
import base64
from controler import Controler
...
...
@app.route('/api/register', methods=['POST'])
def new_user():
    try:
        username = request.json.get('username')
        password = request.json.get('password')
    except:
        abort(400)

    user = users.new_user(username,password)
    return (jsonify({'username': user.username,'uri':url_for('get_user', username=user.username, _external=True)}), 201)
...
...

Controler.py

class Controler():   
ips = 2 #number of machines in the distributed service
    def _init_(self):
    self.con = []#ssh conn
    self.data = []#conn metadata
    self.__initConn()
def __initConn(self):
    i = 0
    config = SSHConfig()
    config.parse(open('./config'))
    for j in range(self.ips):
        i += 1
        o = config.lookup('server' + str(i)) 
        params = dict (
            ssh_address=o['ip'],
            ssh_port=22,
            ssh_host_key=None,
            ssh_username=o['user'],
            ssh_password=o['password'],
            ssh_private_key=None,
            remote_bind_address=('127.0.0.1', 5555),
        )
        a = open_tunnel(**params)
        a.start()#starting tunnel. *************************

它在最后一行停止,当它应该启动 ssh 隧道时。

一些信息:阿帕奇版本 2.4蟒蛇版本 2.7

在 Ubuntu VM 和 Ubuntu 服务器上的子节点上启动

在 Apache 下,你的代码不会以你身份运行,而是以 Apache 用户的身份运行。如果您依赖用户主帐户中的SSH配置/密钥,则它将无法正常工作。

./config的相对路径也不会起作用,因为使用 mod_wsgi 运行应用程序的进程的当前工作目录不会是代码所在的位置。尝试将配置文件的位置计算为绝对路径。

最新更新