From 4f384dd60b42345056058439f2f59702a854b371 Mon Sep 17 00:00:00 2001 From: Karmaa Date: Fri, 21 Mar 2025 00:50:26 -0500 Subject: [PATCH] Keep SSH session alive. --- src/apps/ssh/Terminal.jsx | 9 +++++++++ src/backend/ssh.cjs | 9 +++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/apps/ssh/Terminal.jsx b/src/apps/ssh/Terminal.jsx index e96ae1df..db9e78ca 100644 --- a/src/apps/ssh/Terminal.jsx +++ b/src/apps/ssh/Terminal.jsx @@ -178,7 +178,16 @@ export const NewTerminal = forwardRef(({ hostConfig, isVisible, setIsNoAuthHidde } }); + const pingInterval = setInterval(() => { + socketRef.current.emit("ping"); + }, 5000); + + socketRef.current.on("pong", () => { + console.log("Received pong from server."); + }); + return () => { + clearInterval(pingInterval); if (terminalInstance.current) { terminalInstance.current.dispose(); terminalInstance.current = null; diff --git a/src/backend/ssh.cjs b/src/backend/ssh.cjs index 400db2b1..b4281c3e 100644 --- a/src/backend/ssh.cjs +++ b/src/backend/ssh.cjs @@ -53,7 +53,7 @@ io.on("connection", (socket) => { .on("ready", function () { logger.info("SSH connection established"); - conn.shell({ term: "xterm-256color" }, function (err, newStream) { + conn.shell({ term: "xterm-256color", keepaliveInterval: 30000 }, function (err, newStream) { if (err) { logger.error("Shell error:", err.message); socket.emit("error", err.message); @@ -93,6 +93,9 @@ io.on("connection", (socket) => { logger.error("Error:", err.message); socket.emit("error", err.message); }) + .on("ping", function () { + socket.emit("ping"); + }) .connect({ host: ip, port: port, @@ -102,7 +105,9 @@ io.on("connection", (socket) => { algorithms: { kex: ['curve25519-sha256', 'curve25519-sha256@libssh.org', 'ecdh-sha2-nistp256'], serverHostKey: ['ssh-ed25519', 'ecdsa-sha2-nistp256'] - } + }, + keepaliveInterval: 30000, + keepaliveCountMax: 3, }); });