• zvtd

    【教程】CodeRed Cloud 免费套餐 SSH 登录方案:SFTP 上传 + Cloudflare Argo 隧道 + ttyd 网页终端

    平台免费套餐禁用了 SSH shell,但可以曲线救国:SFTP 传代码 → 部署 Node.js 应用 → cloudflared Argo 出站隧道 + ttyd,把网页版终端挂到 Cloudflare 域名上,浏览器即开即用,全程不需要 root。

    太长不看

    SFTP 连接 :code.codered.cloud:22,用户 code,密码去 Dashboard 重置(临时密码)

    上传位置:/www/,共 5 个文件(cr-run.sh / package.json / index.js / index.html / application.properties)

    平台不会自动 npm install :必须在 cr-run.sh 里显式写

    只有 3000 端口公网可达(Nginx 反代),其余端口被 Azure NSG 丢弃 → 用 cloudflared 出站隧道把 ttyd(localhost:8001)暴露出去

    只有 /www 和 /log 可写,$HOME(/home/code)不可写;文件系统是临时的,重新 Deploy 会重建环境


    0. 背景:为什么要这么折腾

    CodeRed Cloud 是 Node.js / Django / WordPress 托管平台(轻量版 Heroku/Vercel),站点通过 SFTP 上传代码 + Dashboard 面板部署,支持 Node 22/24,预装 PM2。

    免费套餐的硬限制:

    限制 |
    说明 |

    无 root/sudo |
    装不了系统软件、改不了系统配置 |

    SSH 禁用 |
    提示 “Upgrade your plan to enable SSH access”,只有 SFTP(端口 22,用户 code) |

    仅暴露端口 3000 |
    Nginx 只反代 3000,其他端口在 Azure NSG 层直接丢弃 |

    临时文件系统 |
    每次 Deploy 重建环境,/www 之外的修改不保留 |

    可写目录仅 /www 和 /log |
    $HOME(/home/code)不可写 |

    资源配额 |
    RAM ~384 MiB,CPU ~512 MHz(可 burst 3.5 GHz),1 worker |

    思路很简单:SSH 被禁,那就自己造一个网页终端 —— Node 应用启动时下载 ttyd(Web Shell)和 cloudflared(Argo 隧道)两个二进制,ttyd 监听本地端口,cloudflared 建立出站隧道把它挂到 CF 域名,浏览器访问即获得一个可用的服务器 shell。


    1. SFTP 登录

    1.1 获取临时密码

    1. 登录 CodeRed Dashboard:https://code.codered.cloud

    2. 找到你的站点 → System Access (SFTP & SSH) 区块

    3. 点 Reset System Password → 生成临时密码

    ^-^ 密码是临时的:每次 Deploy Production 重新部署后密码都会变,需要重新 Reset 一次。

    1.2 连接参数

    字段 |
    值 |

    主机 |
    code.codered.cloud |

    端口 |
    22 |

    用户名 |
    code |

    协议 |
    SFTP(不是 SSH!) |

    密码 |
    Dashboard → Reset System Password 生成的临时密码 |

    1.3 文件传输

    传输工具和方式自行选择(FileZilla、WinSCP、命令行 sftp 等均可),具体操作步骤可咨询 AI 助手或查阅所用工具的文档,这里不再展开。核心就两点:

    - 连接参数见上表:主机 code.codered.cloud、端口 22、用户 code、临时密码

    - 所有文件都要传到 /www/ 目录下


    ## 2. 上传什么:5 个文件,全部进 /www/

    文件 |
    作用 |

    cr-run.sh |
    平台入口脚本:npm install + exec node index.js(CodeRed 必需) |

    package.json |
    依赖声明:仅 express + axios |

    index.js |
    主程序:Express 状态页 + 运行时下载并拉起 ttyd / cloudflared |

    index.html |
    Vue3 状态页,展示 ttyd / 隧道 URL 等状态 |

    application.properties |
    配置:功能开关、端口、登录凭证、隧道 token |


    cr-run.sh 内容(关键):```

    #!/bin/sh

    npm install --production --no-audit --no-fund 2>&1

    exec node index.js
    ``> ^-^ **CodeRed 不会自动 npm install** 平台只执行 cr-run.sh,不装依赖。第一次部署报 Cannot find module ‘express’` 就是漏了这一步。

    package.json:```

    {

    "name": "codered-ttyd",

    "version": "1.0.0",

    "description": "CodeRed Cloud web terminal via ttyd + Cloudflare Argo",

    "main": "index.js",

    "scripts": { "start": "node index.js" },

    "dependencies": {

    "axios": "latest",

    "express": "latest"

    }

    }
    ```application.properties 关键配置项:```

    LITE_MODE=true

    ENABLE_TTYD=true

    ttyd 登录凭证,格式: 端口:用户名:密码

    ttyd-credential=8001:用户名:密码

    Argo 固定隧道凭证,注意http、端口8001

    ttyd-argo-auth=
    ``> 代码文件必须传到 /www/ **根目录**,平台入口 cr-run.sh` 在那里,放别处不生效。


    ## 3. 部署:让代码跑起来

    SFTP 传完文件后,去 Dashboard → Deployment 标签页:

    操作 |
    行为 |
    适用场景 |

    Restart |
    只重启 Node.js 运行时,不重装依赖 |
    小改动,快 |

    Deploy Production |
    重新构建 + npm install + 重启(约 30s 停机) |
    改依赖 / 首次部署 |

    ^-^ CodeRed 不会自动重载代码,传完文件必须手动点 Deploy 或 Restart。


    4. CF 转发 + ttyd:网页终端是怎么跑起来的

    4.1 原理```

    用户浏览器 ──HTTPS──► Cloudflare Edge ──Argo 出站隧道──► cloudflared(容器内) ──► ttyd(localhost:8001)
    ```为什么必须用 Argo 出站隧道:CodeRed 只有 3000 端口被 Nginx 反代到公网,其他端口在 Azure NSG 层直接丢弃 —— 入站连接根本进不来。而 cloudflared 建立的是出站 WebSocket 连接到 Cloudflare Edge,不碰 Azure 入站防火墙,所以完全不受限。

    4.2 ttyd:网页终端本体

    ttyd 是个 Web Shell 程序,浏览器打开即是终端。本项目由 index.js 在运行时从 GitHub Releases 下载二进制到 /www/.npm/(随机文件名防特征检测),chmod 775 后直接执行:```

    nohup /www/.npm/<随机名> -p 8001 -W -c '用户名:密码' bash >/www/.npm/<随机名>.log 2>&1 &
    ```关键参数:

    - -p 8001:监听端口(与隧道 Ingress 目标一致)

    - -W:必须加,否则终端只能看不能输入

    - -c ‘user:pass’:登录认证

    4.3 访问

    浏览器打开 https://.cfargotunnel.com → 输入 ttyd 用户名密码 → 就是一个完整的服务器 shell。


    5. 注意事项(划重点)

    1. ttyd 必须加 -W:否则网页终端只能看不能输。

    2. 改代码流程:SFTP 上传 → Restart(小改)或 Deploy Production(改依赖),平台不会自动热重载。


    本文为技术学习交流用途,请遵守所在地区法律法规及平台服务条款。有问题欢迎评论区交流。

    主楼
  • btpp03

    支持大佬发帖,有账号的兄弟冲!可惜账号实在是太难注册了。

    #1
  • zvtd

    都忘记说注册的事了,重点是用指纹浏览器+纯净度高的ip

    #2
  • 老

    必须学习一波,感谢大佬的无私分享

    #3

发表回复

登录后回复