代码之家  ›  专栏  ›  技术社区  ›  Kilian Calefice

Docker容器外的SSH隧道

  •  0
  • Kilian Calefice  · 技术社区  · 2 年前

    我正在开发一个python flask应用程序,必须通过隧道进入不同的机器才能访问我们的数据库。当在没有docker的情况下运行应用程序时,我没有问题,一切都很好。但是,当我在容器中运行应用程序时,我会遇到以下错误:

    sshtunnel.BaseSSHTunnelForwarderError: Could not establish session to SSH gateway
    

    我的图像Dockerfile是:

    FROM python:3.11.7-slim
    WORKDIR /monitoring
    COPY ./requirements.txt ./requirements.txt
    RUN python3 -m venv venv
    RUN . venv/bin/activate
    RUN pip install --no-cache-dir -r requirements.txt
    RUN apt-get update && \
    apt-get install -y openssh-client
    COPY ./app ./app
    COPY ./.env ./.env
    EXPOSE 5000
    ENV FLASK_APP=app/main.py
    CMD ["flask", "run"]
    

    我是否必须采取进一步的步骤才能使容器内的应用程序能够通过SSH隧道连接到外部?我在网上查了一下,没有找到关于这样一个问题的资源。你知道我该往哪里看吗?

    经过进一步调查,我发现了这一点(我将记录器传递给SSHTunnelForwarder):

    INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_8.0)
    INFO:paramiko.transport:Authentication (publickey) failed.
    

    这毫无意义,因为我提供的是相同的ssh私钥,而且它在容器之外工作。

    0 回复  |  直到 2 年前
        1
  •  0
  •   Mohammed Ehab    2 年前

    我不确定我是否理解你,但我所理解的是,你的应用程序使用ssh密钥/s来完成一些任务,但不能在容器内的同一应用程序中完成,这是因为容器内不存在ssh密钥文件,如果你在localhost上运行,请将它们复制到容器中,或者将密钥/s的目录装载到容器内的~/.ssh/。