nodejs系列-如何用JS代码连接远程服务器并执行命令创建文件-ssh2
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
今天就写到这里啦~
- 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
- 大家要天天开心哦
欢迎大家指出文章需要改正之处~ 学无止境,合作共赢
欢迎路过的小哥哥小姐姐们提出更好的意见哇~~
转载自:https://juejin.cn/post/7196678344574271544