Node交互式的SFTP上传实现过程剖析

 更新时间:2022年08月09日 10:54:57   作者:鲤鱼粉lyf  
这篇文章主要为大家介绍了Node交互式的SFTP上传实现过程剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

背景

由于业务的原因,我们日常的测试环境,都是通过脚本,将本地打包的代码,进行SFTP上传到对应的测试机目录的(这个业务在测试环境没有CI/CD)。

最近由于安全问题,测试机的权限被收紧了,需要进行交互式的SFTP(即上传时需要用到令牌做二次校验)。

存在问题

此项目用的 ssh2-sftp-client 作为SFTP上传插件,主要是通过自定义的webpack-plugin,在构建完之后进行SFTP上传。

因为原来的stfp配置,是不支持交互式SFTP的,导致运维修改安全策略后,我们无法通过构建命令直接上传测试机,只能通过SFTP工具进行拖拽上传,相当影响工作效率

查阅资料

通过ssh2-sftp-client的文档,发现是没有交互式相关的配置的。而ssh2-sftp-client是基于ssh2的,通过查阅ssh2的文档,发现是支持type:keyboard-interactive(交互式链接的类型)的。

然后就发现有ssh2-sftp-client 存在以下issue:

Whether to support keyboard-interactive parameters

作者描述:

You can add any event listener you want with the on() method, so you should be able to setup keyboard interaction listeners that will gather the information. You will also need to set the tryKeyboard property to true in the connect config object.

意思就是,因为插件是base ssh2 的,我们可以用ssh2对象的事件监听,然后我们在配置链接时,也可以通过配置来进行链接配置。

最后的实现

我们将上传拆分成三个步骤

  • 安全令牌询问
  • 交互式校验监听
  • 创建交互式类型链接
//引用 ssh2-sftp-client库
const Client = require('ssh2-sftp-client')
// 第一步询问令牌
const { interactivePassword } = await inquirerList.interactivePassword()
    if (!interactivePassword) {
      throw new Error('请输入校验令牌')
    }
let sftp = new Client()
// 交互式校验监听
sftp.on('keyboard-interactive', function(
  name,
  instructions,
  instructionsLang,
  prompts,
  finish
) {
  finish([interactivePassword]) //将第一步的令牌填入
})
//创建交互式类型链接
await sftp.connect({
  type: 'keyboard-interactive', //设置类型
  tryKeyboard: true,
  host: 'xxxxx',
  port: 'xxxxx',
  username: 'xxxxx',
  password: 'xxxxx',
})

总结

通过上述代码,就能够通过node实现交互式的SFTP功能

参考文献

ssh2-sftp-client issue#327

ssh2的github仓库

以上就是Node交互式的SFTP上传实现过程剖析的详细内容,更多关于Node交互式SFTP上传的资料请关注脚本之家其它相关文章!

相关文章

  • node.js + socket.io 实现点对点随机匹配聊天

    node.js + socket.io 实现点对点随机匹配聊天

    这篇文章主要介绍了node.js + socket.io 实现点对点随机匹配聊天,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • node-sass安装失败的原因与解决方法

    node-sass安装失败的原因与解决方法

    这篇文章主要给大家介绍了关于node-sass安装失败的原因与解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 如何在node环境实现“get数据解析”代码实例

    如何在node环境实现“get数据解析”代码实例

    这篇文章主要介绍了如何在node环境实现“get数据解析”代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 解析Node.js异常处理中domain模块的使用方法

    解析Node.js异常处理中domain模块的使用方法

    这篇文章主要介绍了Node.js异常处理中domain模块的使用方法,文中最后提到了内存泄漏的相关问题,值得注意,需要的朋友可以参考下
    2016-02-02
  • Node.js基于node-schedule实现定时任务的操作步骤

    Node.js基于node-schedule实现定时任务的操作步骤

    实际工作中,可能会遇到定时清除某个文件夹内容,定时发送消息或发送邮件给指定用户,定时导出某些数据等,node-schedule是一个非常不错的npm包,可以帮助我们快速的创建和管理定时任务,所以本文介绍了Node.js基于node-schedule实现定时任务的操作步骤,需要的朋友可以参考下
    2024-09-09
  • nodejs中使用archive压缩文件的实现代码

    nodejs中使用archive压缩文件的实现代码

    这篇文章主要介绍了nodejs中使用archive压缩文件的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • node.js增删改查保姆级教程方法

    node.js增删改查保姆级教程方法

    这篇文章主要给大家介绍了关于node.js增删改查保姆级教程的相关资料,node.js接口可以实现增加、删除、修改和查询操作,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 详解Node.js实现301、302重定向服务

    详解Node.js实现301、302重定向服务

    这篇文章主要介绍了详解Node.js实现301、302重定向服务,详细的介绍了用Nodejs的http模块,实现一个301或302重定服务。
    2017-04-04
  • 深入解析桶排序算法及Node.js上JavaScript的代码实现

    深入解析桶排序算法及Node.js上JavaScript的代码实现

    桶排序Radix Sort算法利用分治思想将元素分入各桶中排序后汇总,以下我们就来深入解析桶排序算法及Node.js上JavaScript的代码实现,需要的朋友可以参考下
    2016-07-07
  • 搭建基于express框架运行环境的方法步骤

    搭建基于express框架运行环境的方法步骤

    Express提供了一个轻量级模块,把Node.js的http模块功能封装在一个简单易用的接口中,这篇文章主要介绍了搭建基于express框架运行环境的方法步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论