nodejs系列-如何用JS代码连接远程服务器并执行命令创建文件-ssh2

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

ssh2是什么

  • SSH2 client and server模块用纯JavaScript为node.js编写。
  • 我们可以在代码里使用它链接远端服务器执行一些必要的操作

为什么要使用ssh2

作为一名前端我们在某些情况下需要使用代码去登录Linux服务器并执行命令这个时候我们应该怎么办呢这里给大家推荐一个库-ssh2用了它以后前端也可以轻轻松松使用代码去处理一些服务器命令需求啦~

开始使用

来个案例~

创建一个空文件夹,新建app.js,放入以下代码

const { readFileSync } = require('fs');

const { Client } = require('ssh2');

const conn = new Client();
conn.on('ready', () => {
  console.log('Client :: ready');
  conn.exec('uptime', (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.100.100',
  port: 22,
  username: 'frylock',
  privateKey: readFileSync('/path/to/my/key')
});

// example output:
// Client :: ready
// STDOUT:  17:41:15 up 22 days, 18:09,  1 user,  load average: 0.00, 0.01, 0.05
//
// Stream :: exit :: code: 0, signal: undefined
// Stream :: close

下载依赖

npm i fs ssh2 --save

将client配置改为我们自己的服务器配置

{
  host: '112.126.61.91',
  port: 22,
  username: 'root',
  privateKey: readFileSync('./key/ali/id_rsa')
}

关于privateKey请参考我的这篇文章创建并使用私钥privateKey登录 SSH 服务器

执行命令运行成功~

阅读文件目录示例

const { readFileSync } = require('fs');

const { Client } = require('ssh2');

const conn = new Client();
conn.on('ready', () => {
  console.log('Client :: ready');
  conn.sftp((err, sftp) => {
    if (err) throw err;
    sftp.readdir('/home', (err, list) => {
      if (err) throw err;
      console.dir(list);
      conn.end();
    });
  });
//   conn.exec('uptime', (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: '112.126.61.91',
  port: 22,
  username: 'root',
  privateKey: readFileSync('./key/ali/id_rsa')
});

// example output:
// Client :: ready
// STDOUT:  17:41:15 up 22 days, 18:09,  1 user,  load average: 0.00, 0.01, 0.05
//
// Stream :: exit :: code: 0, signal: undefined
// Stream :: close

进入文件目录执行命令创建文件

const { readFileSync } = require('fs');

const { Client } = require('ssh2');

const conn = new Client();
conn.on('ready', () => {
  console.log('Client :: ready');
  conn.shell((err, stream) => {
    if (err) throw err;
    stream.on('close', () => {
      console.log('Stream :: close');
      conn.end();
    }).on('data', (data) => {
      console.log('OUTPUT: ' + data);
    });
    stream.end('cd /home\nls\ntouch xiaojin.txt\n');
  });
}).connect({
  host: '112.126.61.91',
  port: 22,
  username: 'root',
  privateKey: readFileSync('./key/ali/id_rsa')
});

// example output:
// Client :: ready
// STDOUT:  17:41:15 up 22 days, 18:09,  1 user,  load average: 0.00, 0.01, 0.05
//
// Stream :: exit :: code: 0, signal: undefined
// Stream :: close

今天就写到这里啦~

  • 小伙伴们( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境合作共赢

在这里插入图片描述

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 服务器NodeJS