python - 无法使用来自 Docker 容器的 SSH 隧道连接到远程数据库

标签 python docker ssh cx-oracle ssh-tunnel

我的脚本在我的本地主机中运行得非常好,直到我开始在 Docker 容器中运行它。我不知道出了什么问题。我得到 信息:与数据库的连接失败!由于异常:没有可用的密码或公钥! 错误
我的 db_config.py 文件:

with SSHTunnelForwarder(
                (<Bastian Host IP>, 22),
                ssh_username=<user>,
                ssh_pkey='oalkey.openssh',
                ssh_private_key_password=<pass>,
                remote_bind_address=(<Remote DB IP>, 1521),
                local_bind_address=('localhost', 1521)
         ) as tunnel:
            dsn_tns = 

cx_Oracle.makedsn(os.getenv("LOCAL_BIND_HOST",'localhost'),os.getenv("SSH_TUNNEL_PORT",1521),
                                        service_name=os.getenv("OCI_DSP_SERVICE","default"))
            self.db_connection = cx_Oracle.connect(os.getenv("OCI_DAS_NAME"),
                                                   os.getenv("OCI_DAS_PASS"), dsn_tns)
            logger.info('Connection to  DB successful')
        #server.stop()
    except Exception as ex:
        logger.info('Connection to DB failed! due to Exception: {}'.format(ex))

最佳答案

哦,我解决了这个问题。这是因为我的 Dockerfile 中的 WORKDIR 指向根位置,我必须将 ssh_pkey='oalkey.openssh' 中的相对路径写入 ssh_pkey='app/var/www/oalkey.openssh'。简单的 :-)

关于python - 无法使用来自 Docker 容器的 SSH 隧道连接到远程数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63179066/

相关文章:

python - 我想将所有 .tgz 和 .tar 文件提取到一个目录中

python - 使用多处理队列从进程获取信息

docker - 让 Dockerised 站点在 Traefik 反向代理后面运行

php - 未捕获的 PDOException : could not find driver inside docker container

docker - logstash-5.x gelf输入多行编解码器不起作用

validation - 无人值守测试 ssh(公钥/私钥)连接的可靠方法

linux - 对每个主机使用自定义参数的并行 SSH

python - 列出 max() 方法

python - 如何在 python 中将 pocketsphinx (5prealpha) 与 gstreamer-1.0 一起使用?

c# - 立即停止所有 SSH 连接