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

article/2025/11/6 18:46:39

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

今天就写到这里啦~

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

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

在这里插入图片描述

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


http://chatgpt.dhexx.cn/article/w5w9emcT.shtml

相关文章

【SSH2框架(理论篇)】--SSH2 Vs 经典三层

 这几天一直在学习使用SSH2框架,对于框架本身的使用并不是很困难,相信经过多锻炼就能够熟练的掌握框架的使用,让我匪夷所思的是在使用框架的时候感觉很熟悉,好像在哪里用过似得。就在某次查看代码的时候突…

xshell7无法远程连接linux虚拟机,启动SSHD报错:Bad SSH2 cipher spec...

项目场景: xshell7无法远程连接linux虚拟机 问题描述 终端输入systemctl start sshd 启动报错: 输入sshd -t 查看具体报错信息: 解决方案: 输入ssh -Q cipher,查看ssh使用了哪些ciphers: 复制结果 输入vim …

2.ssh远程登录

1.ssh命令 (1)ssh命令的参数ssh- l 指定登陆用户 - i 指定私钥 - X 开启图形 - f 后台运行 - o 指定连接参数 - t 制定连接跳板 ssh - l root 172.25.254 .x -o "StrictHostKeyChecking no" 首次连接不需要…

SSH建立原理

一、ssh2协议 在ssh1中,由单个协议提供密钥交换、身份认证与加密的功能,而ssh2内部由3个协议组合一起,为其提供这些功能。这3个协议: 传输层协议 认证协议 连接协议 传输层协议 主要提供密钥交换与服务器端认证功能 认证协议…

SSH2协议加密与连接过程

最近在做ssh2联动交换机模块,看到libssh2-1.9.0版本对于用户认证有三种不同的方式: ① password(默认)② keyboard-interactive ③ publickey 看代码并不是太理解,所以查询了一番,SSH2通信大致分为两步&a…

来说说datatype

今天敲代码一直卡在一个问题上面好久那就是--datatype的未定义,起初不晓得datatype的含义,遇到这种情况首先想到的就是自己又忘记加上面头文件了。随即写了个stdlib.h上去。可是问题并没有得到解决,还是显示未定义。 怀疑是不是自己拼写的错误…

StringType报错,提示不是DataType类型

使用scala语言将RDD转化为sparkSQL时,构造StructType时StringType报错 val schema StructType( //构建函数,给每列数据一个统一的列名Seq(StructField("phoneNum",IntegerType,true),StructField("time",Integer…

mysql workbench的datatype设置问题

create table之后,创建column,选择datatype。我选择timestamp和datetime如图所示后就失败。 问题就在于要么去掉括号,要么括号里面填写数字。 成功后如图。 这里只要看paidTime的datatype即可。 这个问题真的花了我很久的时间,我…

datalist

在Web设计中,经常会用到如输入框的自动下拉提示,这将大大方便用户的输入。在以前,如果要实现这样的功能,必须要求开发者使用一些Javascript的技巧或相关的框架进行ajax调用,需要一定的编程工作量。但随着HTML5 的慢慢普及,开发者可…

TS DataType

TypeScript有13中数据类型 布尔值(Boolean) 最基本的数据类型就是简单的 true/ false值,在 JavaScript和 TypeScript里叫做 boolean(其它语言中也一样)。 let isDone: boolean false;数字(Number) 和 JavaScript一样, TypeSc…

Autosar DataType介绍

前言 看了一下基本的配置,发现Autosar的DataType的内容比较多,也比较复杂,所以单独开一章来记录一下 Autosar DataType介绍 前言一.基本数据类型1.1基本类型1.2其他类型 二,详细数据介绍2.1 新建数据类型的具体类型2.2 详细举例介…

contentType与dataType

$.ajax contentType 和 dataType , contentType 主要设置你发送给服务器的格式,dataType设置你收到服务器数据的格式。 在http 请求中,get 和 post 是最常用的。在 jquery 的 ajax 中, contentType都是默认的值:application/x-ww…

Types of Data

企业中的数据都如何分类? 粗略的分类 如果粗略点的分类话,可以分为两类数据:主数据和事务型数据。 主数据(Master Data) “Master Data is your business critical data that is stored in disparate systems spread across your Enterprise.…

Python DataType(数据类型)

简述 变量:指代任意一个数,或其他数据类型 变量名:大小写英文、数字和下划线(_)的组合,且不能用数字开头 Python主要的数据类型有如下:(允许自定义数据类型) 整数&…

条件随机场适用于无监督学习吗?

条件随机场适用于无监督学习吗? 在网上搜到的资料比较少。 HMM模型可以用EM算法来进行无监督学习。

深入理解机器学习——概率图模型(Probabilistic Graphical Model):条件随机场(Conditional Random Field,CRF)

分类目录:《深入理解机器学习》总目录 条件随机场(Conditional Random Field,CRF)是一种判别式无向图模型,在《概率图模型(Probabilistic Graphical Model):隐马尔可夫模型&#xff…

概率图模型之条件随机场

条件随机场(CRF)是一种判别式无向图模型。生成式模型是直接对联合分布进行建模,而判别式模型是对条件分布进行建模。前面提到的隐马尔可夫模型和马尔可夫随机场都是生成式模型,而条件随机场则是判别式模型。条件随机场试图对多个变…

马尔可夫随机场与条件随机场

文章目录 马尔可夫随机场1. 引言2. 团与极大团3. MRF联合概率4. MRF的条件独立性(有向分离)条件随机场 马尔可夫随机场 1. 引言 马尔可夫随机场(Markov Random Field,简称MRF),是马尔可夫网的一种,生成式模型,是一种著名的无向图…

通俗易懂条件随机场CRF

条件随机场CRF 条件随机场(Conditional Random Fields, 以下简称CRF)是给定一组输入序列条件下另一组输出序列的条件概率分布模型,在自然语言处理中得到了广泛应用。本系列主要关注于CRF的特殊形式:线性链(Linear chain) CRF。本文关注与CRF的模型基础。…

条件随机场(2)——概率计算

1.CRF简化表示 先回顾一下线性链CRF参数化形式 和都可以表示为随机变量的函数,因此,可以将和统一成 其中,是转移特征的个数,是状态特征的个数。特征函数所代表的特征集合一共有K个值,。 用来表示特征的权重&am…