ssh2详细使用步骤,以及常用方法介绍

news/2025/1/15 19:20:12/

开源地址:https://github.com/mscdex/ssh2>ssh2

ssh2>ssh2 是一个功能强大的 Node.js 库,用于通过 SSH 协议与远程服务器交互。它支持命令执行、文件上传下载、端口转发等操作,常用于自动化脚本和远程服务器管理。

下面是 ssh2>ssh2 的详细使用步骤和常用方法介绍。


一、安装

首先,安装 ssh2>ssh2 模块:

javascript">npm install ssh2>ssh2

二、基本使用步骤

1. 导入模块

javascript">const { Client } = require('ssh2>ssh2');

2. 建立连接

javascript">const conn = new Client();conn.on('ready', () => {console.log('SSH Connection Ready');// 可以在这里执行命令、上传文件等}).on('error', (err) => {console.error('Connection Error:', err);}).on('close', () => {console.log('Connection Closed');}).connect({host: 'your-server-ip',port: 22, // SSH 默认端口username: 'your-username',password: 'your-password', // 或使用 privateKey});

三、常用方法

1. 远程命令执行 (exec)

用于在远程服务器上运行命令。

javascript">conn.exec('ls -l', (err, stream) => {if (err) throw err;stream.on('close', (code, signal) => {console.log(`命令执行完毕: 退出码 ${code}, 信号 ${signal}`);conn.end(); // 关闭连接}).on('data', (data) => {console.log('STDOUT:', data.toString());}).stderr.on('data', (data) => {console.error('STDERR:', data.toString());});
});

2. 上传文件 (sftp)

通过 SFTP 上传文件到远程服务器。

javascript">conn.sftp((err, sftp) => {if (err) throw err;const localFile = './local-file.txt';const remoteFile = '/path/to/remote-file.txt';sftp.fastPut(localFile, remoteFile, {}, (err) => {if (err) {console.error('上传失败:', err);} else {console.log('文件上传成功');}conn.end();});
});

3. 下载文件 (sftp)

通过 SFTP 下载文件到本地。

javascript">conn.sftp((err, sftp) => {if (err) throw err;const remoteFile = '/path/to/remote-file.txt';const localFile = './local-file.txt';sftp.fastGet(remoteFile, localFile, {}, (err) => {if (err) {console.error('下载失败:', err);} else {console.log('文件下载成功');}conn.end();});
});

4. 获取远程目录内容 (sftp)

列出远程目录中的文件和子目录。

javascript">conn.sftp((err, sftp) => {if (err) throw err;const remoteDir = '/path/to/remote-dir';sftp.readdir(remoteDir, (err, list) => {if (err) {console.error('读取目录失败:', err);} else {console.log('目录内容:', list);}conn.end();});
});

5. 端口转发 (forwardIn)

将远程服务器的端口映射到本地,适用于开发和调试。

javascript">conn.on('ready', () => {conn.forwardIn('127.0.0.1', 8000, (err) => {if (err) throw err;console.log('端口转发成功: 远程 127.0.0.1:8000');});
}).connect({host: 'your-server-ip',port: 22,username: 'your-username',password: 'your-password',
});

6. 转发本地端口到远程 (forwardOut)

将本地端口数据通过 SSH 通道转发到远程服务器。

javascript">conn.on('ready', () => {conn.forwardOut('127.0.0.1', 8000, 'remote-server-ip', 9000, (err, stream) => {if (err) throw err;stream.write('Hello Remote Server');stream.end();});
}).connect({host: 'your-server-ip',port: 22,username: 'your-username',password: 'your-password',
});

7. 使用私钥认证

通过私钥进行连接。

javascript">conn.connect({host: 'your-server-ip',port: 22,username: 'your-username',privateKey: require('fs').readFileSync('/path/to/private-key'),
});

8. 动态代理 (createStream)

通过 ssh2>ssh2 创建 SOCKS 代理,常用于科学上网。

javascript">const socks = require('socksv5');conn.on('ready', () => {console.log('SSH ready for SOCKS proxy');socks.createServer((info, accept, deny) => {conn.forwardOut(info.srcAddr, info.srcPort, info.dstAddr, info.dstPort, (err, stream) => {if (err) {deny();return;}const clientSocket = accept(true);stream.pipe(clientSocket).pipe(stream);});}).listen(1080, '127.0.0.1', () => {console.log('SOCKS proxy listening on 127.0.0.1:1080');});}).connect({host: 'your-server-ip',port: 22,username: 'your-username',password: 'your-password',});

四、常见问题

  1. 连接失败

    • 检查 hostport 是否正确。
    • 确保远程服务器启用了 SSH 服务。
  2. 权限问题

    • 确保 SSH 用户有足够的权限,必要时使用 sudo(参考之前提到的 -S 方法)。
  3. 性能优化

    • 使用 SFTP 的 fastPutfastGet 替代普通 putget
    • 批量处理文件时,考虑异步调用。

官方文档

更多方法和参数详见 ssh2>ssh2 官方文档。


http://www.ppmy.cn/news/1563402.html

相关文章

在ES6模块中导入和导出

在ES6模块中导入和导出 以最简单的例子举例 //shoppingCart.js //导出模块 console.log(导出模块);//script.js //导出模块 import ./shoppingCart.js; console.log(导入模块);所以要导入其他模块必须指定类型 <script type"Modules" defer src"script.js&…

2Hive表类型

2Hive表类型 1 Hive 数据类型2 Hive 内部表3 Hive 外部表4 Hive 分区表5 Hive 分桶表6 Hive 视图 1 Hive 数据类型 Hive的基本数据类型有&#xff1a;TINYINT&#xff0c;SAMLLINT&#xff0c;INT&#xff0c;BIGINT&#xff0c;BOOLEAN&#xff0c;FLOAT&#xff0c;DOUBLE&a…

【计算机网络】深入浅出计算机网络

第一章 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成一种重要的信息服务基础设施 CNNIC 中国互联网网络信息中心 因特网概述 网络、互联网和因特网 网络&#xff08;Network&#xff09;由若干结点&#xff08;Node&#xff09;和连接这些结点的链路…

(Arxiv-2023)LORA-FA:针对大型语言模型微调的内存高效低秩自适应

LORA-FA&#xff1a;针对大型语言模型微调的内存高效低秩自适应 paper是香港浸会大学发表在Arxiv 2023的工作 paper title&#xff1a;LORA-FA: MEMORY-EFFICIENT LOW-RANK ADAPTATION FOR LARGE LANGUAGE MODELS FINE-TUNING ABSTRACT 低秩自适应 (LoRA) 方法可以大大减少微调…

计算机网络 | 什么是公网、私网、NAT?

关注&#xff1a;CodingTechWork 引言 计算机网络是现代信息社会的基石&#xff0c;而网络通信的顺畅性和安全性依赖于有效的IP地址管理和网络转换机制。在网络中&#xff0c;IP地址起到了标识设备和进行数据传输的核心作用。本文将详细讨论公网IP、私网IP以及NAT转换等网络技…

Excel中双引号问题

背景&#xff1a; 从Excel中读取数据时&#xff0c;发现有的单元格读出来是一个双引号&#xff0c;有的是一个双引号 "{""accountName"": ""全字段"",""accountState"": ""NORMAL"",&q…

C++实现设计模式---单例模式 (Singleton)

单例模式 (Singleton) 概念 单例模式 确保一个类在整个程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点。 它是一种创建型设计模式&#xff0c;广泛用于需要共享资源的场景。 使用场景 配置管理器&#xff1a;程序中需要一个全局的配置对象。日志系统&#xff…

无人机+无人车:车机协同技术探索详解

无人机与无人车之间的协同技术是一种重要的研究方向&#xff0c;它结合了无人机的高空视野和无人车的地面移动能力&#xff0c;旨在实现更高效、灵活的作业。以下是对无人机与无人车车机协同技术的详细探索&#xff1a; 一、技术基础 1. 通信机制&#xff1a; 无人机与无人车…