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

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上传的资料请关注易知道(ezd.cc)其它相关文章!

推荐阅读

    node 服务器端启动

    node 服务器端启动,远程桌面,设置为,场景: 根据资料学习,制作了一个web聊天室的应用,部署在windows服务器上,运行正常,当关闭远程桌面,运营node

    创业做网站选择用node好还是php

    创业做网站选择用node好还是php,语言,页面,如果你所开发的是一个PHP网站的前端页面或模板,PHP和Python语言都相对比较简单,所以虽然PHP语

    1-14node中的commonjs规范的实现

    1-14node中的commonjs规范的实现,模块,文件,node中的模块 1.内置模块、核心模块 2.第三方模块 commander/co 3.文件模块es6Module“静态”

    node express返回json数据给前端

    node express返回json数据给前端,上传,格式,请注意,使用res.json()的格式1.前面不能添加 res.writeHead(200, {‘content-type‘: ‘text/

    nodejs如何升级到最新稳定版本

    nodejs如何升级到最新稳定版本,版本,安装,命令,最新,升级,最新版本,Node.js是一种开源的、跨平台的JavaScript运行环境,它使用了Google V8引擎来

    一文带你深入了解Node.js(图文详解)

    一文带你深入了解Node.js(图文详解),模块,中间件,路由,描述,插入图片,服务器,本篇文章通过超多代码和图解来带大家深入解析Node.js,主要内容包括模

    怎么删除nodejs

    怎么删除nodejs,删除,卸载,选择,鼠标,教程,文件,删除nodejs的方法:1、打开“控制面板”,点击“卸载程序”;2、在“卸载或更改程序”界面,找到并选中

    nodejs怎么查看版本(三种方法)

    nodejs怎么查看版本(三种方法),版本,版本信息,查看,方法,命令行,系统,Node.js 是一个非常流行的开源 JavaScript 运行时环境,它可以运行在多个平台

    nodejs怎么安装?详细步骤介绍

    nodejs怎么安装?详细步骤介绍,安装,模块,输入,命令,系统,版本,随着互联网的不断发展,越来越多的前端开发者开始学习 Node.js。Node.js 它是一个基

    nodejs如何更新(4种方法)

    nodejs如何更新(4种方法),更新,安装,版本,命令,安装程序,命令行,Node.js是一个开放源代码的跨平台JavaScript运行环境,它在不同的平台上都得到了广

    详解Node怎么卸载?【步骤分享】

    详解Node怎么卸载?【步骤分享】,删除,文件,卸载,环境变量,查看,系统,Node怎么卸载?下面本篇文章给大家分享Node卸载超详细步骤,跟着本文一步步卸载

    [Curator] Node Cache 的使用与分析

    [Curator] Node Cache 的使用与分析,缓存,节点,Node Cache 使用节点数据作为本地缓存使用。这个类可以对节点进行监听,能够处理节点的增删