Shell-Eggs Docs · Install
One egg JSON, one Docker image, every shell. Import it into any panel - or skip the panel and run the image directly. Credentials (SHELL_USERS) are the only mandatory input.
The same five steps work on Pterodactyl, Pelican, Feather and Wisp:
Egg JSON: egg-shell-multi.json · raw (update_url): raw.githubusercontent.com/.../master/egg-shell-multi.json
docker run -d --name my-shells \
-p 2222:2222 \
-e SHELL_TYPE=ssh,tmux \
-e SHELL_USERS=alice,bob \
-e SHELL_PASSWORDS=auto,auto \
ghcr.io/potenfyr-studios/shell-eggs:latestWithout a panel, SERVER_PORT defaults to 8888 - map it with -p and forward every extra ported shell you enable via SHELL_EXTRA_PORTS.
| Image | Contents |
|---|---|
ghcr.io/potenfyr-studios/shell-eggs:latest | Universal Multi-Shell (All Types) - every tool the catalog needs: sshd, dropbear, telnetd, mosh, tmux/screen/zellij, socat/ncat/nc, python, php, node, perl, ruby, lua, go, java, powershell, ttyd, gotty and the debug harnesses. |
Multi-arch (amd64 + arm64), rebuilt on every push - GHCR package.
The egg's startup command boots the entrypoint from the image, the server dir, or - as a last resort - fetches it from the repo, so old installs self-bootstrap:
if [ -f /entrypoint.sh ]; then exec bash /entrypoint.sh; elif [ -f /usr/local/bin/entrypoint.sh ]; then exec bash /usr/local/bin/entrypoint.sh; elif [ -f ./entrypoint.sh ]; then exec bash ./entrypoint.sh; else curl -fsSL https://raw.githubusercontent.com/PotenFYR-Studios/Shell-Eggs/master/entrypoint.sh | exec bash; fiIt is preconfigured in the egg JSON - you never type it. Self-update defaults to the raw egg on master (EGG_UPDATE_URL, AUTO_UPDATE_EGG=1).
.env and .sh-users/credentials (mode 600).24 variables in the egg JSON · updated automatically on every build via docs/scripts/sync-data.ts.