Nodejs能否远程连接Linux或Windows

Nodejs能否远程连接Linux或Windows

最近想自己用nodejs开发一个自动部署工具,也就是在我机器上运行的node,可以通过ssh连接linux服务器,执行服务器上的sh脚本。目前在连接方面感觉没有思路,哪位大神可以指点一下。

4 回复

当然可以!Node.js 可以通过多种方式实现对 Linux 或 Windows 远程服务器的连接和操作。对于 Linux 服务器,最常用的方式是使用 SSH(Secure Shell)协议。对于 Windows 服务器,你可以使用 PowerShell 或 WMI(Windows Management Instrumentation)。

对于 Linux 服务器

你可以使用 node-ssh 模块来实现 SSH 连接和执行远程命令。以下是一个简单的示例:

  1. 首先安装 node-ssh 模块:

    npm install node-ssh
    
  2. 然后编写 Node.js 脚本进行连接和执行命令:

    const NodeSSH = require('node-ssh');
    
    const ssh = new NodeSSH();
    
    async function connectAndExecute() {
        try {
            // 连接到远程 Linux 服务器
            await ssh.connect({
                host: 'your_server_ip',    // 服务器 IP 地址
                username: 'your_username', // 用户名
                password: 'your_password'  // 密码
            });
    
            // 执行远程命令
            const commandOutput = await ssh.execCommand('ls -l');
            console.log(commandOutput.stdout);
    
            // 上传文件
            await ssh.putFile('/path/to/local/file', '/path/to/remote/file');
    
            // 下载文件
            await ssh.getFile('/path/to/remote/file', '/path/to/local/file');
    
            // 断开连接
            ssh.dispose();
        } catch (error) {
            console.error('Error:', error);
        }
    }
    
    connectAndExecute();
    

对于 Windows 服务器

你可以使用 win-ssh-shell 模块来实现类似的功能。以下是一个简单的示例:

  1. 首先安装 win-ssh-shell 模块:

    npm install win-ssh-shell
    
  2. 然后编写 Node.js 脚本进行连接和执行命令:

    const { Client } = require('win-ssh-shell');
    
    const client = new Client();
    
    client.on('ready', () => {
        console.log('Client :: ready');
        client.exec('Get-Process', (err, stream) => {
            if (err) throw err;
            stream.on('close', (code, signal) => {
                console.log(`Stream :: close :: code: ${code} | signal: ${signal}`);
                client.end();
            }).on('data', (data) => {
                console.log(`STDOUT: ${data}`);
            }).stderr.on('data', (data) => {
                console.log(`STDERR: ${data}`);
            });
        });
    }).connect({
        host: 'your_server_ip',      // 服务器 IP 地址
        username: 'your_username',   // 用户名
        password: 'your_password',   // 密码
        port: 22                     // SSH 端口,默认为 22
    });
    

以上示例展示了如何使用 Node.js 进行 SSH 连接并执行远程命令。你可以根据实际需求修改这些示例代码。希望这些示例对你有所帮助!


可以的,我也在写类似的工具,可以看看我的github,大家一起交流

Node.js 是否能远程连接 Linux 或 Windows

Node.js 可以通过多种方式实现远程连接到 Linux 或 Windows 系统。对于 Linux 系统,常用的方案是使用 SSH(Secure Shell)协议进行连接;而对于 Windows 系统,则可以通过诸如 WinRM(Windows Remote Management)等协议来实现。

连接 Linux

为了实现从 Node.js 应用程序中通过 SSH 连接到 Linux 服务器,我们可以使用 ssh2 模块。以下是基本示例代码:

  1. 首先,安装 ssh2 模块:

    npm install ssh2
    
  2. 示例代码:

    const Client = require('ssh2').Client;
    
    const conn = new Client();
    conn.on('ready', () => {
        console.log('Connection :: ready');
        // 在这里执行你需要的命令
        conn.exec('ls -la', (err, stream) => {
          if (err) throw err;
          stream.on('close', (code, signal) => {
            console.log(`Stream :: close :: code: ${code}, signal: ${signal}`);
            conn.end();
          }).on('data', (data) => {
            console.log(`STDOUT: ${data}`);
          }).stderr.on('data', (data) => {
            console.log(`STDERR: ${data}`);
          });
        });
    }).connect({
      host: '192.168.1.100',
      port: 22,
      username: 'your-username',
      password: 'your-password'
    });
    

连接 Windows

连接到 Windows 系统可以使用 winrm 模块。首先需要确保你的 Windows 机器已经配置了 WinRM 服务,并且允许远程管理。

  1. 安装 winrm-fs 模块:

    npm install winrm-fs
    
  2. 示例代码:

    const { create } = require('winrm-fs');
    
    const winrm = create({
      endpoint: 'http://your-windows-machine:5985/wsman',
      username: 'your-username',
      password: 'your-password',
      realm: 'http://schemas.xmlsoap.org/ws/2005/02/trust',
      authScheme: 'kerberos'
    });
    
    winrm.command('powershell Get-Process')
    .then((stdout) => {
      console.log(stdout);
    })
    .catch((error) => {
      console.error(error);
    });
    

总结

通过以上示例,你可以看到 Node.js 能够方便地与 Linux 和 Windows 进行交互,从而实现自动化任务如文件传输、脚本执行等。对于 Linux 系统,使用 ssh2 模块是一个好的选择;对于 Windows 系统,winrm-fs 提供了一个简单的方式来执行 PowerShell 命令或其他管理任务。

回到顶部