您现在的位置是:网站首页> 编程资料编程资料
Node交互式的SFTP上传实现过程剖析_node.js_
2023-05-24
390人已围观
简介 Node交互式的SFTP上传实现过程剖析_node.js_
背景
由于业务的原因,我们日常的测试环境,都是通过脚本,将本地打包的代码,进行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功能
参考文献
以上就是Node交互式的SFTP上传实现过程剖析的详细内容,更多关于Node交互式SFTP上传的资料请关注其它相关文章!
相关内容
- 如何手动销毁Vue中挂载的组件_vue.js_
- vue实现自定义组件挂载原型上_vue.js_
- NPM配置私服构建内网中央仓库过程详解_node.js_
- vue3如何自定义js文件(插件或配置)_vue.js_
- vue3自定义组件之v-model实现父子组件双向绑定_vue.js_
- vue自定义加载指令v-loading占位图指令v-showimg_vue.js_
- vue3点击出现弹窗后背景变暗且不可操作的实现代码_vue.js_
- 三种在ES6中将非数组转换为数组的方法详情_javascript技巧_
- vue性能优化之cdn引入vue-Router的问题_vue.js_
- UMD的包导出TS 类型方法示例_JavaScript_
