首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSH配置文件端口转发在Docker中未按预期工作(compose)

SSH配置文件端口转发在Docker中未按预期工作(compose)
EN

Stack Overflow用户
提问于 2018-08-01 12:46:48
回答 1查看 1.7K关注 0票数 2

我有一个包含nginx、php、redis的Docker组合文件,还有一个专门用于SSH隧道的容器。

我在我的mac上有一个ssh配置文件,当我运行ssh my-tunnel时,它可以正常工作,并通过文件./ssh/config暴露给镜像

这是我用于ssh隧道的Dockerfile

代码语言:javascript
复制
FROM alpine:edge

RUN apk add --update openssh-client && rm -rf /var/cache/apk/*

# cagataygurturk/docker-ssh-tunnel:0.0.1
CMD rm -rf /root/.ssh && mkdir /root/.ssh && \
    cp /run/secrets/ssh_config /root/.ssh/config && \
    cp /run/secrets/ssh_key /root/.ssh/id_rsa && \
    chmod -R 600 /root/.ssh/* && \
    # see https://man.openbsd.org/ssh
    ssh -4 -o StrictHostKeyChecking=no -N $TUNNEL_HOST \
    && while true; do sleep 30; done;
EXPOSE 1-65535

这是我的docker-compose.yaml (删节)

代码语言:javascript
复制
version: '3.1'

services:
  php:
    ...
    links:
     - ssh-tunnel

  ssh-tunnel:
    build:
      context: ./ssh
    secrets:
      - ssh_config
      - ssh_key
    environment:
      TUNNEL_HOST: my-tunnel

secrets:
  ssh_config:
    file: ./ssh/config
  ssh_key:
    file: ./ssh/id_rsa

我从这个容器得到的唯一输出是Warning: Permanently added '[IP_SPECIFIED_IN_CONFIG]:PORT_SPECIFIED_IN_CONFIG_FILE' (ECDSA) to the list of known hosts.,并且应用程序无法连接到隧道服务。我可以解决这个问题的唯一方法是将CMD更改为

代码语言:javascript
复制
CMD rm -rf /root/.ssh && mkdir /root/.ssh && \
cp /run/secrets/ssh_config /root/.ssh/config && \
cp /run/secrets/ssh_key /root/.ssh/id_rsa && \
chmod -R 600 /root/.ssh/* && \
# see https://man.openbsd.org/ssh
ssh -4 -o StrictHostKeyChecking=no -N $TUNNEL_HOST \
-L *:$LOCAL_PORT_1:$REMOTE_HOST_1:$REMOTE_PORT_1 \
-L *:$LOCAL_PORT_2:$REMOTE_HOST_2:$REMOTE_PORT_2 \
&& while true; do sleep 30; done;

这并不理想,因为需要多个本地转发,否则我将只使用this container

为什么不使用命令行选项-L指定本地转发的配置不起作用?我知道配置文件(包含本地转发)正在被读取,因为IP地址被添加到known_hosts。

netstat -an的输出

代码语言:javascript
复制
# WORKING
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address            Foreign Address         
State
tcp        0      0 127.0.0.11:34951         0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:$LOCAT_PORT_2  0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:$LOCAL_PORT_1  0.0.0.0:*               LISTEN
tcp        0      0 172.20.0.3:34902         HostName:Port     
ESTABLISHED
udp        0      0 127.0.0.11:50743         0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path

# NOT WORKING
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:$LOCAL_PORT_2   0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.11:39857        0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:$LOCAL_PORT_1   0.0.0.0:*               LISTEN
tcp        0      0 172.21.0.3:47994        Hostname:Port     ESTABLISHED
udp        0      0 127.0.0.11:42928        0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
EN

回答 1

Stack Overflow用户

发布于 2018-08-03 02:51:18

我在我的~/.ssh/config文件中指定了

代码语言:javascript
复制
LocalForward PORT PUBLIC_URL:PORT

而不是

代码语言:javascript
复制
LocalForward *:PORT PUBLIC_URL:PORT
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51625501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档