返回

xterm.js + Express.js + ssh2.js:构建安全的WebSSH应用

前端

引言

WebSSH是一种允许用户通过Web浏览器访问远程服务器的终端仿真技术。它提供了一种安全便捷的方式来管理和控制服务器,而无需使用传统的SSH客户端。本文将指导您如何使用Express.js、xterm.js和ssh2.js构建一个功能强大且安全的WebSSH应用程序。

服务端配置

  1. 安装依赖包
npm install express xterm ssh2
  1. 创建服务器
const express = require('express');
const xterm = require('xterm');
const ssh2 = require('ssh2');

const app = express();

app.use(express.static('public'));

app.get('/', (req, res) => {
  res.sendFile('index.html');
});

app.post('/ssh', (req, res) => {
  const { username, password, host, port } = req.body;

  const client = new ssh2.Client();

  client.on('ready', () => {
    const term = new xterm.Terminal();
    term.open(document.getElementById('terminal'));

    client.shell((err, stream) => {
      if (err) {
        res.status(500).send(err);
      }

      stream.on('data', (data) => {
        term.write(data.toString());
      });

      term.on('data', (data) => {
        stream.write(data);
      });

      term.on('resize', (size) => {
        stream.setWindow(size.cols, size.rows);
      });
    });
  });

  client.connect({
    host,
    port,
    username,
    password
  });
});

app.listen(3000);

客户端配置

  1. 创建HTML页面
<!DOCTYPE html>
<html>
<head>
  
  <script src="https://unpkg.com/xterm@4.20.1/dist/xterm.min.js"></script>
  <script src="main.js"></script>
</head>
<body>
  <div id="terminal"></div>
</body>
</html>
  1. 创建JavaScript文件
const term = new xterm.Terminal();
term.open(document.getElementById('terminal'));

const client = new ssh2.Client();

client.on('ready', () => {
  const username = prompt('Username:');
  const password = prompt('Password:');
  const host = prompt('Host:');
  const port = prompt('Port:');

  client.connect({
    host,
    port,
    username,
    password
  });
});

client.on('error', (err) => {
  alert(err.message);
});

client.on('shell', (err, stream) => {
  if (err) {
    alert(err.message);
  }

  stream.on('data', (data) => {
    term.write(data.toString());
  });

  term.on('data', (data) => {
    stream.write(data);
  });

  term.on('resize', (size) => {
    stream.setWindow(size.cols, size.rows);
  });
});

效果

运行服务器并访问http://localhost:3000,您将看到一个终端窗口。输入您的SSH凭据并连接到远程服务器。连接成功后,您可以在终端窗口中输入命令来管理和控制服务器。

结语

本文提供了一个分步指南,指导您如何使用Express.js、xterm.js和ssh2.js构建一个功能强大且安全的WebSSH应用程序。通过使用这些技术,您可以轻松地创建允许用户通过Web浏览器访问远程服务器的终端仿真解决方案。