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功能
参考文献
以上就是Node交互式的SFTP上传实现过程剖析的详细内容,更多关于Node交互式SFTP上传的资料请关注脚本之家其它相关文章!
相关文章
node.js + socket.io 实现点对点随机匹配聊天
这篇文章主要介绍了node.js + socket.io 实现点对点随机匹配聊天,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06
Node.js基于node-schedule实现定时任务的操作步骤
实际工作中,可能会遇到定时清除某个文件夹内容,定时发送消息或发送邮件给指定用户,定时导出某些数据等,node-schedule是一个非常不错的npm包,可以帮助我们快速的创建和管理定时任务,所以本文介绍了Node.js基于node-schedule实现定时任务的操作步骤,需要的朋友可以参考下2024-09-09
深入解析桶排序算法及Node.js上JavaScript的代码实现
桶排序Radix Sort算法利用分治思想将元素分入各桶中排序后汇总,以下我们就来深入解析桶排序算法及Node.js上JavaScript的代码实现,需要的朋友可以参考下2016-07-07


最新评论