diff --git a/dashboard/backend/config.py b/dashboard/backend/config.py index 5bfbf48..61c98dc 100644 --- a/dashboard/backend/config.py +++ b/dashboard/backend/config.py @@ -19,3 +19,7 @@ TOTP_SECRET = os.environ.get("TOTP_SECRET", "JBSWY3DPEHPK3PXP") # Base32 encoded SSH_HOST = os.environ.get("SSH_HOST", "host.docker.internal") SSH_USER = os.environ.get("SSH_USER", "zjgump") SSH_KEY_PATH = os.environ.get("SSH_KEY_PATH", "/app/ssh/id_ed25519") + +VPS_SSH_HOST = os.environ.get("VPS_SSH_HOST", "158.101.140.85") +VPS_SSH_USER = os.environ.get("VPS_SSH_USER", "jimmyg") +VPS_SSH_KEY_PATH = os.environ.get("VPS_SSH_KEY_PATH", "/app/ssh/vps_id_ed25519") diff --git a/dashboard/backend/routers/terminal.py b/dashboard/backend/routers/terminal.py index 991e5ba..eb55c33 100644 --- a/dashboard/backend/routers/terminal.py +++ b/dashboard/backend/routers/terminal.py @@ -5,8 +5,13 @@ import asyncssh import jwt import config +HOSTS = { + "nas": {"host": config.SSH_HOST, "user": config.SSH_USER, "key": config.SSH_KEY_PATH}, + "vps": {"host": config.VPS_SSH_HOST, "user": config.VPS_SSH_USER, "key": config.VPS_SSH_KEY_PATH}, +} -async def ws_endpoint(websocket: WebSocket, token: str = Query("")): + +async def ws_endpoint(websocket: WebSocket, token: str = Query(""), host: str = Query("nas")): try: payload = jwt.decode(token, config.SECRET_KEY, algorithms=[config.ALGORITHM]) if payload.get("sub") != config.ADMIN_USER: @@ -18,10 +23,11 @@ async def ws_endpoint(websocket: WebSocket, token: str = Query("")): await websocket.accept() + h = HOSTS.get(host, HOSTS["nas"]) try: conn = await asyncssh.connect( - config.SSH_HOST, username=config.SSH_USER, - client_keys=[config.SSH_KEY_PATH], known_hosts=None, + h["host"], username=h["user"], + client_keys=[h["key"]], known_hosts=None, ) except Exception: await websocket.close(code=1011, reason="SSH connection failed") diff --git a/dashboard/docker-compose.yml b/dashboard/docker-compose.yml index d88e4bb..a09d50f 100644 --- a/dashboard/docker-compose.yml +++ b/dashboard/docker-compose.yml @@ -32,11 +32,14 @@ services: - VOLUME_ROOT=/volume1 - SSH_HOST=host.docker.internal - SSH_USER=zjgump + - VPS_SSH_HOST=158.101.140.85 + - VPS_SSH_USER=jimmyg - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-} - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID:-} volumes: - /volume1:/volume1 - /volume1/docker/nas-dashboard/ssh/dashboard_terminal:/app/ssh/id_ed25519:ro + - /volume1/docker/nas-dashboard/ssh/vps_terminal:/app/ssh/vps_id_ed25519:ro healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:4000/api/system/stats')"] interval: 30s diff --git a/dashboard/frontend/src/routes/Terminal.svelte b/dashboard/frontend/src/routes/Terminal.svelte index e3dbff1..cbab066 100644 --- a/dashboard/frontend/src/routes/Terminal.svelte +++ b/dashboard/frontend/src/routes/Terminal.svelte @@ -1,12 +1,17 @@
- {#if connected} - - - Connected - - {:else if error} - {error} - {:else} - - - Connecting... - - {/if} -
+