zhuhai111 commited on
Commit
7e134a7
·
verified ·
1 Parent(s): 3fefc71

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +28 -0
  2. entrypoint_wrapper.sh +54 -0
Dockerfile ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 基于 nkpro/chrome-novnc:latest 镜像
2
+ FROM nkpro/chrome-novnc:latest
3
+
4
+ # 切换到 root 用户以安装软件包
5
+ USER root
6
+
7
+ # 更新包列表并安装 openssh-client, sshpass, 和 autossh
8
+ # --no-install-recommends 减少镜像大小
9
+ # 清理 apt 缓存
10
+ RUN apt-get update && apt-get install -y --no-install-recommends \
11
+ openssh-client \
12
+ sshpass \
13
+ autossh \
14
+ && rm -rf /var/lib/apt/lists/*
15
+
16
+ # 将包装脚本复制到镜像中
17
+ COPY entrypoint_wrapper.sh /entrypoint_wrapper.sh
18
+
19
+ # 使包装脚本可执行
20
+ RUN chmod +x /entrypoint_wrapper.sh
21
+
22
+ # 将包装脚本设置为新的入口点
23
+ # 基础镜像的 CMD 将作为参数传递给此脚本
24
+ ENTRYPOINT ["/entrypoint_wrapper.sh"]
25
+
26
+ # (可选) 如果基础镜像最后切换回非 root 用户,可以在这里切换回去
27
+ # 例如: USER 1000
28
+ USER 1000
entrypoint_wrapper.sh ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e # 如果任何命令失败,则立即退出
3
+
4
+ # --- 配置 SSH 隧道 ---
5
+ REMOTE_USER="abcuser"
6
+ REMOTE_HOST="www.ip188.net"
7
+ REMOTE_SSH_PORT="30002"
8
+ REMOTE_FORWARD_PORT="15900" # 远程服务器 (www.ip188.net) 上要监听的端口
9
+ LOCAL_PORT="5900" # 容器内部要暴露的端口 (VNC 默认端口)
10
+ PASSWORD="abc123456" # SSH 密码 (强烈建议使用 SSH 密钥代替!)
11
+ # --- 配置结束 ---
12
+
13
+ echo "正在启动 SSH 隧道 (后台)..."
14
+ echo "远程转发: ${REMOTE_HOST}:${REMOTE_FORWARD_PORT} -> 容器 localhost:${LOCAL_PORT}"
15
+
16
+ # 导出密码供 sshpass 使用
17
+ export SSHPASS="${PASSWORD}"
18
+
19
+ # 设置 AUTOSSH 环境变量
20
+ # AUTOSSH_GATETIME=0: 防止 autossh 在首次连接失败时立即退出
21
+ # AUTOSSH_POLL=60: 每 60 秒检查一次连接状态 (可选)
22
+ export AUTOSSH_GATETIME=0
23
+ # export AUTOSSH_POLL=60
24
+
25
+ # 使用 autossh 启动 SSH 隧道
26
+ # -M 0: 不使用监控端口,依靠 SSH 进程的退出状态来检测连接失败
27
+ # -f: autossh 在成功建立连接和认证后转入后台运行
28
+ # -N: SSH 选项 - 不执行远程命令,仅用于端口转发
29
+ # -R: SSH 选项 - 远程端口转发 (Server to Client)
30
+ # -o StrictHostKeyChecking=no: 首次连接时不提示确认主机密钥 (生产环境不推荐)
31
+ # -o UserKnownHostsFile=/dev/null: 不使用 known_hosts 文件 (生产环境不推荐)
32
+ # -o ServerAliveInterval=30: 每 30 秒发送一次心跳以保持连接
33
+ # -o ServerAliveCountMax=3: 允许 3 次心跳无响应后断开
34
+ # -o ExitOnForwardFailure=yes: 如果端口转发设置失败则退出
35
+ # sshpass -e: 使用 SSHPASS 环境变量中的密码
36
+ autossh -M 0 -f \
37
+ -o "ServerAliveInterval=30" \
38
+ -o "ServerAliveCountMax=3" \
39
+ -o "StrictHostKeyChecking=no" \
40
+ -o "UserKnownHostsFile=/dev/null" \
41
+ -o "ExitOnForwardFailure=yes" \
42
+ sshpass -e ssh \
43
+ -N \
44
+ -R ${REMOTE_FORWARD_PORT}:localhost:${LOCAL_PORT} \
45
+ -p ${REMOTE_SSH_PORT} \
46
+ ${REMOTE_USER}@${REMOTE_HOST}
47
+
48
+ echo "SSH 隧道启动命令已发出。等待几秒钟..."
49
+ sleep 5 # 等待一下,让隧道有机会建立或失败
50
+
51
+ echo "隧道设置尝试完成。现在执行容器的原始命令..."
52
+
53
+ # 执行传递给此脚本的任何命令 (即 Dockerfile 中的 CMD)
54
+ exec "$@"