使用ssh2 模块执行shell的时候,只有在连接目标机器时,有个readyTimeout用于设置ssh连接目标机器的超时终止的参数。
conn.connect({
host: ip,
port: 22,
username: user,
password: password,
readyTimeout: 5000
没有用于设置shell执行的超时的参数,但是我的shell命令在机器负载高的情况下返回时间需要很久很久,需要超过一定时间需要终止掉shell。
看了github别人提得issue也没有很好的解决办法,后来用了个取巧的办法如下
方法也是蛮简单,结合系统提供的shell命令timeout
例子:
timeout 2s pwd
var Client = require('ssh2').Client;
var conn = new Client();
conn.on('ready', function() {
var command = 'source ~/.bash_profile;timeout 2s pwd'
conn.exec(command, function(err, stream) {
if (err) throw err;
stream.on('close', function(code, signal) {
conn.end();
}).on('data', function(data) {
}).on('error', function(err) {
.connect({
host: currentHost.host,
port: currentHost.port,
username: currentHost.username,
password: currentHost.password
readyTimeout: 5000
使用ssh2 模块执行shell的时候,只有在连接目标机器时,有个readyTimeout用于设置ssh连接目标机器的超时终止的参数。 conn.connect({ host: ip, port: 22, username: user, password: password, readyTimeout: 5000}); 没有用于设置she
这个怎么运作?
# Run command "node shell.js" inside the app folder & provide the necessary details required
# to login into the server. Username & hostname are required fields.
> node shell.js
Deployment Engine Node Plugin for SSH2.
Usage: /usr/local/bin/node shell.js --options...
Options:
-u, --username, --user SSH Login Usernam
const $cExec = require ( 'command-exec' ) ;
( async ( ) => {
const result = $cExec ( 'ls' ) ;
console . log ( result ) ;
} ) ( ) ;
// OUTPUT
// eslintrc.json
// .git
// .gitignore
// .travis.yml
// LICENSE
// README.md
// index.js
// node_modules
// package-lock.json
// package.json
// tests
有兴趣为这个项目做贡献吗? 您可以记录与此库相关的任何问题或建
对于nohup java -jar xxxx.jar & 部署jar失败的原因 可能是对应的jar包没有找到
或者是环境变量中的jdk没有找到
因此 可以通过写绝对路径去避免这样的问题发生
es: nohup /app/jdk/bin/java -jar /app/xxx/xxx.jar >/app/output.log &
执行指令 同时可以将日志输出到指定的位置 方便去判断部署失败的原因
大家好,我是若川。我持续组织了近一年的源码共读活动,感兴趣的可以点此扫码加我微信lxchuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。本文来自读者@凌览 投稿,欢迎大家投稿????????????????????????
原文链接:https://juejin.cn/...
Node.js使用exec模拟耗时操作测试非阻塞最近看了一本书《Node入门》,其中,如果想要一个请求处理程序中耗时的操作不会阻塞对另一个请求作出立即响应,使用了Node.js的child_process模块的一个既简单又实用的非阻塞操作exec()。下面模拟通过exec()中执行一个耗时操作,来测试非阻塞。// 这里只写了exec代码,其他部分详见《Node入门》
// 休眠6秒后执行ls -la
封装nodejs的基本功能,封装为一个类,实现的功能能够如下:
对于反复连接断开1000次,测试运行无错,也没有内存泄露
对于运行shell命令,测试在一次连接中运行8000+条命令,无错
对于上传下载文件夹,上传下载一个文件夹中包含800+的文件夹,共7000+文件无问题
在单连接测试下,运行状况良好,多连接同时运行测试时,当同时连接数量超过20台机器,会问题有的机器连接不上的问题,不过对于单连接
conn.on('ready', async() => { // 准备就绪
const readyMsg = `++++++++Client :: ready: ${ip} ++++++++`;
conn.
exec(
shellCmd, async (err
Node.js SSH2模块是一个用于在Node.js环境中执行SSH协议的实现,它允许我们通过SSH连接到远程服务器并执行shell命令。
首先,我们需要使用`npm`包管理器将`ssh2`模块安装到我们的项目中。通过执行`npm install ssh2`命令来安装它。
一旦我们安装了`ssh2`模块,我们就可以在我们的Node.js脚本中使用它。首先,我们需要创建一个SSH连接,并提供连接所需的地址和凭据。我们可以使用`conn.connect`方法来建立与SSH服务器的连接。
接下来,我们可以使用`conn.exec`方法来执行要在远程服务器上运行的shell命令。我们可以将shell命令作为参数传递给`conn.exec`方法,并传递一个回调函数来处理命令的结果。在回调函数中,我们可以访问命令的输出和错误。
最后,我们需要在完成任务后断开SSH连接。我们可以使用`conn.end`方法来主动关闭SSH连接。
例如,以下是一个简单的Node.js脚本,使用SSH2模块连接到远程服务器并执行shell命令的示例:
```javascript
const Client = require('ssh2').Client;
const conn = new Client();
conn.on('ready', () => {
console.log('SSH连接成功');
conn.exec('ls', (err, stream) => {
if (err) throw err;
stream.on('close', (code, signal) => {
console.log('命令执行完成');
conn.end();
}).on('data', (data) => {
console.log('命令输出: ' + data);
}).stderr.on('data', (data) => {
console.log('命令错误输出: ' + data);
}).connect({
host: 'remote.host',
port: 22,
username: 'username',
password: 'password'
在上述示例中,我们连接到远程服务器,并执行`ls`命令。在回调函数中,我们打印命令的输出和错误,并在任务完成后断开SSH连接。
以上就是使用Node.js SSH2模块执行shell命令的基本方法。我们可以根据实际需求进行更复杂的操作,比如执行多个命令、传输文件等。希望这能帮助到您。
### 回答2:
Node.js中的ssh2模块是一个客户端实现的SSH2协议库,它允许我们在Node.js应用程序中执行SSH操作,包括连接到SSH服务器、身份验证和执行shell命令。
在使用ssh2执行shell命令时,需要先通过ssh2模块的`Client`类创建一个SSH客户端实例,然后调用`connect`方法连接到SSH服务器。连接成功后,我们可以通过`exec`方法执行shell命令。以下是一个简单的例子:
```javascript
const ssh2 = require('ssh2');
const conn = new ssh2.Client();
conn.on('ready', () => {
console.log('SSH 连接成功');
conn.exec('echo "Hello World"', (err, stream) => {
if (err) throw err;
// 读取命令输出
stream.on('close', (code, signal) => {
conn.end(); // 关闭连接
}).on('data', (data) => {
console.log('命令输出:' + data);
}).stderr.on('data', (data) => {
console.log('命令错误输出:' + data);
}).connect({
host: 'ssh服务器地址',
port: 'ssh端口号',
username: '用户名',
password: '密码'
上述例子中,首先创建一个`Client`实例`conn`,然后在`ready`事件的回调函数中执行连接成功后的操作。在`exec`方法中传入要执行的shell命令,`stream`参数是一个可读流,用于获取命令输出。我们可以通过监听`close`事件获取命令执行结束的状态码,通过监听`data`事件获取命令的标准输出,通过监听`stderr`事件获取错误输出。
最后使用`connect`方法连接到SSH服务器,并传入相应的连接参数,如目标主机地址、端口号、用户名和密码。
以上就是使用ssh2模块执行shell命令的简要介绍。当然,使用ssh2还可以做更多的操作,如上传文件、下载文件、端口转发等。根据实际需求,我们可以进一步扩展和定制。
### 回答3:
Node.js是一种基于JavaScript运行的服务器端开发工具,而SSH2则是一个用于在Node.js中执行SSH操作的库。使用SSH2库,我们可以通过Node.js连接到远程服务器,并执行一些Shell命令。
首先,我们需要安装SSH2库,可以使用npm命令进行安装:
npm install ssh2
然后,在我们的Node.js代码中,我们需要引入SSH2库:
```javascript
const conn = require('ssh2').Client();
接下来,可以使用`connect`方法连接到远程服务器:
```javascript
conn.connect({
host: 'remote_host',
port: 'remote_port',
username: 'remote_username',
password: 'remote_password'
成功连接到服务器后,可以通过`shell`方法创建一个Shell会话:
```javascript
conn.shell(function(err, stream) {
if (err) throw err;
// 在这里执行Shell命令
在Shell会话中,我们可以使用`stderr`和`stdout`事件监听获取命令执行结果:
```javascript
stream.on('data', function(data) {
console.log('stdout: ' + data);
}).stderr.on('data', function(data) {
console.log('stderr: ' + data);
最后,我们可以使用`end`方法结束Shell会话并关闭连接:
```javascript
stream.end('exit\n');
以上就是使用Node.js的SSH2库执行Shell命令的过程。通过这种方式,我们可以在Node.js中与远程服务器进行交互,并执行需要的命令。
SpringBoot 上传报错;the request was rejected because its size (796311) exceeds the configured maximum (1
Horizon⸙:
域名合法判断
zkc0403:
docker exec提示错误oci runtime error: exec failed: container_linux.go
面向??编程:
SpringBoot 上传报错;the request was rejected because its size (796311) exceeds the configured maximum (1
qq_2333333333: