Add multi-host terminal: NAS + VPS side-by-side
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user