[node]nodejs ssh2测试

本文介绍如何使用Node.js通过SSH协议实现远程服务器命令执行及交互式shell会话。涉及的技术包括Node.js模块ssh2的使用方法,具体演示了远程执行单个命令和多个命令的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1exec(无上下文,远程执行命令)
  1. var Client = require('ssh2').Client;
  2. var conn = new Client();
  3. conn.on('ready', function() {
  4. conn.exec('uname -a', function(err, stream) {
  5. if (err) throw err;
  6. stream.on('close', function(code, signal) {
  7. conn.end();
  8. }).on('data', function(data) {
  9. console.log('STDOUT: ' + data);
  10. }).stderr.on('data', function(data) {
  11. console.log('STDERR: ' + data);
  12. });
  13. });
  14. }).connect({
  15. host: '192.168.6.150',
  16. port: 22,
  17. username: 'slview',
  18. password: 'slview#2012'
  19. //privateKey: require('fs').readFileSync('/home/admin/.ssh/id_dsa')
  20. });
运行结果正常
  1. D:\fk\work\node\ssh>node tsshexec.js
  2. STDOUT: Linux master 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x
  3. 86_64 x86_64 x86_64 GNU/Linux
注意: 如果返回数据较多,那么会分包, ondata会多次调用,

2.2shell模式(多个命令交互)
  1. var Client = require('ssh2').Client;
  2. var conn = new Client();
  3. conn.on('ready', function() {
  4. console.log('Client :: ready');
  5. conn.shell(function(err, stream) {
  6. if (err) throw err;
  7. stream.on('close', function() {
  8. console.log('Stream :: close');
  9. conn.end();
  10. }).on('data', function(data) {
  11. console.log('STDOUT: ' + data);
  12. }).stderr.on('data', function(data) {
  13. console.log('STDERR: ' + data);
  14. });
  15. stream.end('cd test\nls -l\nexit\n');
  16. });
  17. }).connect({
  18. host: '192.168.6.150',
  19. port: 22,
  20. username: 'slview',
  21. password: 'slview#2012'
  22. });

2.2.1连接高版本ssh没问题。
  1. D:\fk\work\node\ssh>node tsshshdev.js
  2. Client :: ready
  3. STDOUT: Last login: Tue Oct 25 17:43:58 2016 from 219.143.200.152
  4. STDOUT: ssh -V
  5. exit
  6. STDOUT: -bash-4.1$ ssh -V
  7. STDOUT: OpenSSH_7.1p1, OpenSSL 1.0.1m 19 Mar 2015
  8. -bash-4.1$ exit
  9. STDOUT: logout
  10. Stream :: close
  11. D:\fk\work\node\ssh>

2.2.2连接设备模拟器
有点小问题,serverhostkey格式不对(开启debug,定位问题)
\ssh\node_modules\ssh2-streams\lib\constant.js
  1. var DEFAULT_SERVER_HOST_KEY = [
  2. 'ssh-rsa'
  3. ];
补充ssh-dss(原来是在suport里面,默认未开启)
  1. var DEFAULT_SERVER_HOST_KEY = [
  2. 'ssh-rsa',
  3. 'ssh-dss'
  4. ];
登录居然也一次过
  1. var Client = require('ssh2').Client;
  2. var conn = new Client();
  3. conn.on('ready', function() {
  4. console.log('Client :: ready');
  5. conn.shell(function(err, stream) {
  6. if (err) throw err;
  7. stream.on('close', function() {
  8. console.log('Stream :: close');
  9. conn.end();
  10. }).on('data', function(data) {
  11. console.log('STDOUT: ' + data);
  12. }).stderr.on('data', function(data) {
  13. console.log('STDERR: ' + data);
  14. });
  15. //huawei
  16. //stream.write('display version\n');
  17. //stream.write('screen-length 0 temporary\n'); //more的问题
  18. //stream.write('?'); //more的问题
  19. //stream.end('logout\n');
  20. //iox
  21. //stream.write('show version\n');
  22. //stream.end('exit\n');
  23. //ios
  24. stream.write('en\nshow version\n');
  25. stream.end('exit\n');
  26. });
  27. }).connect({
  28. host: '192.168.6.150',
  29. //huawei 登录ok
  30. //port: 10022,
  31. //iox 登录ok
  32. //port: 10023,
  33. //ios 登录ok
  34. port: 10024,
  35. username: 'admin',
  36. password: 'admin',
  37. //debug: function(str) { console.log('%j', str); }
  38. //password: 'Wygmwbl@0431'
  39. });


### 回答1: 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命令的基本方法。我们可以根据实际需求进行更复杂的操作,比如执行多个命令、传输文件等。希望这能帮助到您。 ### 回答2Node.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.jsSSH2库执行Shell命令的过程。通过这种方式,我们可以在Node.js中与远程服务器进行交互,并执行需要的命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值