node.js操作远程服务器

一下演示都是在windows上远程操作linux系统

一.利用ssh进行免密码登陆

1.在windows上安装git bash客户端

2.分别在windows上和linux上执行一下命令配置ssh

ssh -keygen -t rsa -C "邮箱地址",邮箱地址可以省略不写ssh-keygen -t rsa,然后一直回车就行了。

windows下:

centos7下:

3.此时在windows /c/Users/YXHY/.ssh下会生成如下两个文件:

同样在linux /root/.ssh下也会生成 这样两个文件:

4.然后再windows和linux上分别执行一下命令:

cat id_rsa.pub>> authorized_keys

这时候就会再windows和Linux上分别生成一个authorized_keys文件,如果你想用windows上的node.js控制liux就把windows上的authorized_keys文件复制到linux的/root/.ssh/下就行了。windows控制哪个服务器,就把windows上的authorized_keys复制到哪个服务器的/root/.ssh/下。

二、使用node.js控制linux

const { readFileSync } = require(fs);

const { Client } = require(ssh2);

const conn = new Client();
conn.on(ready, () => {
  console.log(Client :: ready);

  //执行命令
 /*  conn.exec(ls, (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);
    });
  }); */


  //获取目录
  /* conn.sftp((err, sftp) => {
    if (err) throw err;
    sftp.readdir(/home, (err, list) => {
      if (err) throw err;
      console.dir(list);
      conn.end();
    });
  }); */

  //执行多个命令
  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
ls
touch fff.txt
);
  });

}).connect({
  host: 10.0.68.131,
  port: 22,
  username: root,
  privateKey: readFileSync(C:/Users/YXHY/.ssh/id_rsa)
});

以上测试命令中有的命令不太好使,比如top,编辑文件命令串等。路过的朋友可以研究研究感谢!

经验分享 程序员 微信小程序 职场和发展