Node交互式的SFTP上傳實(shí)現(xiàn)過程剖析
背景
由于業(yè)務(wù)的原因,我們?nèi)粘5臏y(cè)試環(huán)境,都是通過腳本,將本地打包的代碼,進(jìn)行SFTP上傳到對(duì)應(yīng)的測(cè)試機(jī)目錄的(這個(gè)業(yè)務(wù)在測(cè)試環(huán)境沒有CI/CD)。
最近由于安全問題,測(cè)試機(jī)的權(quán)限被收緊了,需要進(jìn)行交互式的SFTP(即上傳時(shí)需要用到令牌做二次校驗(yàn))。
存在問題
此項(xiàng)目用的 ssh2-sftp-client 作為SFTP上傳插件,主要是通過自定義的webpack-plugin,在構(gòu)建完之后進(jìn)行SFTP上傳。
因?yàn)樵瓉淼膕tfp配置,是不支持交互式SFTP的,導(dǎo)致運(yùn)維修改安全策略后,我們無法通過構(gòu)建命令直接上傳測(cè)試機(jī),只能通過SFTP工具進(jìn)行拖拽上傳,相當(dāng)影響工作效率
查閱資料
通過ssh2-sftp-client的文檔,發(fā)現(xiàn)是沒有交互式相關(guān)的配置的。而ssh2-sftp-client是基于ssh2的,通過查閱ssh2的文檔,發(fā)現(xiàn)是支持type:keyboard-interactive(交互式鏈接的類型)的。
然后就發(fā)現(xiàn)有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.
意思就是,因?yàn)椴寮莃ase ssh2 的,我們可以用ssh2對(duì)象的事件監(jiān)聽,然后我們?cè)谂渲面溄訒r(shí),也可以通過配置來進(jìn)行鏈接配置。
最后的實(shí)現(xiàn)
我們將上傳拆分成三個(gè)步驟
- 安全令牌詢問
- 交互式校驗(yàn)監(jiān)聽
- 創(chuàng)建交互式類型鏈接
//引用 ssh2-sftp-client庫 const Client = require('ssh2-sftp-client') // 第一步詢問令牌 const { interactivePassword } = await inquirerList.interactivePassword() if (!interactivePassword) { throw new Error('請(qǐng)輸入校驗(yàn)令牌') } let sftp = new Client() // 交互式校驗(yàn)監(jiān)聽 sftp.on('keyboard-interactive', function( name, instructions, instructionsLang, prompts, finish ) { finish([interactivePassword]) //將第一步的令牌填入 }) //創(chuàng)建交互式類型鏈接 await sftp.connect({ type: 'keyboard-interactive', //設(shè)置類型 tryKeyboard: true, host: 'xxxxx', port: 'xxxxx', username: 'xxxxx', password: 'xxxxx', })
總結(jié)
通過上述代碼,就能夠通過node實(shí)現(xiàn)交互式的SFTP功能
參考文獻(xiàn)
以上就是Node交互式的SFTP上傳實(shí)現(xiàn)過程剖析的詳細(xì)內(nèi)容,更多關(guān)于Node交互式SFTP上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Node-red的在線評(píng)語系統(tǒng)(可視化編程,公網(wǎng)訪問)
Node-Red是IBM公司開發(fā)的一個(gè)可視化的編程工具,在網(wǎng)頁內(nèi)編程,主要是拖拽控件,代碼量很小,這篇文章主要介紹了基于Node-red的在線評(píng)語系統(tǒng)(可視化編程,公網(wǎng)訪問),需要的朋友可以參考下2022-01-01node.js 開發(fā)指南 – Node.js 連接 MySQL 并進(jìn)行數(shù)據(jù)庫操作
通常在NodeJS開發(fā)中我們經(jīng)常涉及到操作數(shù)據(jù)庫,尤其是 MySQL ,作為應(yīng)用最為廣泛的開源數(shù)據(jù)庫則成為我們的首選,本篇就來介紹下如何通過NodeJS來操作 MySQL 數(shù)據(jù)庫。2014-07-07Node.js折騰記一:讀指定文件夾,輸出該文件夾的文件樹詳解
這篇文章主要介紹了Node.js讀指定文件夾輸出該文件夾文件樹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04node.js Promise對(duì)象的使用方法實(shí)例分析
這篇文章主要介紹了node.js Promise對(duì)象的使用方法,結(jié)合實(shí)例形式分析了node.js中Promise對(duì)象的功能、定義、調(diào)用方法及相關(guān)使用技巧,需要的朋友可以參考下2019-12-12Nodejs-cluster模塊知識(shí)點(diǎn)總結(jié)及實(shí)例用法
在本篇文章里小編給大家整理的是一篇關(guān)于Nodejs-cluster模塊知識(shí)點(diǎn)總結(jié)及實(shí)例用法,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-12-12