一下演示都是在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\nls\ntouch fff.txt\n');
});
}).connect({
host: '10.0.68.131',
port: 22,
username: 'root',
privateKey: readFileSync('C:/Users/YXHY/.ssh/id_rsa')
});
以上测试命令中有的命令不太好使,比如top,编辑文件命令串等。路过的朋友可以研究研究感谢!