在软件开发过程中,文件的上传与下载是一个常见的需求,而在SFTP(SSH File Transfer Protocol)上传功能的实现过程中,很多开发者可能会遇到一些困扰和问题。而针对这个问题,一个名为ssh2-sftp-client的开源库应运而生。这个库提供了一种简单且高效的方式来实现SFTP文件上传功能。在本文中我们将介绍使用ssh2-sftp-client库实现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仓库
以上就是ssh2-sftp-client的全部内容,如果还有不清楚的用户,可以参考以上的步骤进行操作,希望对大家有所帮助。
电脑教程推荐
win10系统推荐
Copyright © 2009-2025 纯净系统之家 版权声明