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