npm ssh2库-执行上传下载简介

1,435 阅读2分钟

安装及创建

npm install ssh2

var Client = require('ssh2').Client;
var conn = new Client();

连接

/** 接受一个连接配置对象
* host?: string; 域名或者ip地址
* port?: number; 端口号
* forceIPv4?: boolean; 仅解析连接ipv4地址的域名或者ip地址
* forceIPv6?: boolean; 仅解析连接ipv6地址的域名或者ip地址
* hostHash?: "md5" | "sha1"; 选择加密方式加密主机密钥给hostVerifier
* hostVerifier?: (keyHash: string) => boolean; 检测主机密钥合法性
* username?: string; 远程服务器账号
* password?: string; 远程服务器密码
* agent?: string; ssh代理,用于用户身份验证或在Windows上使用Pagent时为“Pagent”
* privateKey?: Buffer | string; 包含用于基于密钥或基于主机的用户身份验证的私钥
* passphrase?: string; 用来解密的私钥
* localHostname?: string; 与“localUsername”和“privateKey”一起,将其设置为非空字符串,以便进行基于主机的用户身份验证。
* localUsername?: string; 与“localHostname”和“privateKey”一起,将其设置为非空字符串,以便进行基于主机的用户身份验证。
* tryKeyboard?: boolean; 如果用户身份验证方法失败,请尝试键盘交互式用户身份验证
*/
conn.connect(ConnectConfig)

ssh2常用API

  • 执行远程服务指令 exec(command: string, callback: (err: Error | undefined, channel: ClientChannel) => void): boolean;

command要执行的指令;如: ls -al,cd

callback执行完回调函数;返回错误或者执行流

conn.on('ready', function() {
  console.log('Client :: ready');
  conn.exec('uptime', function(err, stream) {
    if (err) throw err;
    stream.on('close', function(code, signal) {
      console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
      conn.end();
    }).on('data', function(data) {
      console.log('STDOUT: ' + data);
    }).stderr.on('data', function(data) {
      console.log('STDERR: ' + data);
    });
  });
}).connect({
  host: '192.168.100.100',
  port: 22,
  username: 'frylock',
  privateKey: require('fs').readFileSync('/here/is/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
  • 操作远程服务器文件 sftp callback执行完回调函数;返回错误或者SFTPWrapper执行流

sftp(callback: (err: Error | undefined, sftp: SFTPWrapper) => void): boolean;

conn.on('ready', function() {
  console.log('Client :: ready');
  conn.sftp(function(err, sftp) {
    if (err) throw err;
    // 业务逻辑
  });
}).connect({
  host: '192.168.100.100',
  port: 22,
  username: 'frylock',
  privateKey: require('fs').readFileSync('/here/is/my/key')
});
  • 上传文件 localPath要上传的本地文件路径;如: ${__dirname}/test.txt

remotePath要上传远程服务器文件路径;如:/home/xx/test.txt

callback执行完回调函数;返回错误

fastPut(localPath: string, remotePath: string, callback: (err: any) => void): void;

conn.on('ready', function() {
  console.log('Client :: ready');
  conn.sftp(function(err, sftp) {
    if (err) throw err;
    
    sftp.fastPut(`${__dirname}/text.txt`,"/home/xx/text.txt",
    (err) => {console.log(err)})
  });
}).connect({
  host: '192.168.100.100',
  port: 22,
  username: 'frylock',
  privateKey: require('fs').readFileSync('/here/is/my/key')
});
  • 下载远程文件 localPath要上传的本地文件路径;如: ${__dirname}/test.txt

remotePath要上传远程服务器文件路径;如:/home/xx/test.txt

callback执行完回调函数;返回错误

fastGet(remotePath: string, localPath: string, callback: (err: any) => void): void;

conn.on('ready', function() {
  console.log('Client :: ready');
  conn.sftp(function(err, sftp) {
    if (err) throw err;
    
    sftp.fastGet("/home/xx/text.txt",`${__dirname}/text.txt`,
    (err) => {console.log(err)})
  });
}).connect({
  host: '192.168.100.100',
  port: 22,
  username: 'frylock',
  privateKey: require('fs').readFileSync('/here/is/my/key')
});