摘要:本系列文章共分為基礎篇,安全篇,拓展篇。免密發布安全等級配置文件中的選項完全就是庫的選項,那么熟悉登錄服務器的同學應該知道可以免密登錄服務器。不過較真來說,這對于的開發者及依賴庫的開發者而言私鑰文件還是可以讀取到的,不能算絕對安全。
前言本系列文章共分為基礎篇,安全篇,拓展篇。
如果還不了解fjpublish或者不知本文所云的童鞋請先花個5分鐘看看基礎篇:
使用fjpublish發布前端項目(基礎篇)
自從上一期在sf安利使用fjpublish來進行項目發布后收到了不少小伙伴的star和建議,證明fjpublish確實是一個對前端圈有幫助的輪子,今天就著fjpublish2.0.0正式版發布之機來談談如何使用fjpublish安全地發布項目,也可以直接查看文檔原文。
服務器登錄信息安全我相信這是小伙伴們關心的重點,對于把生產服務器密碼什么的放在別人開發的工具的配置文件中,估計睡覺也不會安穩吧...
那么怎么樣使用fjpublish才能更安全呢,以下將列出幾個方法,請根據自己要發布的環境和掌握難度自行配置。
將配置文件添加至版本忽略列表是最簡單的方式也是最不穩定的方式,因為說不定什么時候就忘記把配置文件加入版本忽略列表導致密碼暴露,不過如果都是發布內網,那么問題也不大。
//例如在.gitignore中添加這一行 ... fjpublish.config.js ...2.命令選項配置(安全等級 ★★)
可以使用fjpublish env
密碼可以省略,如果省略密碼,fjpublish將在命令確認后多帶帶彈出一個輸入框填寫密碼,完全模擬ssh的登錄行為,例如:fjpublish env test --ssh root@192.168.0.100。
若為同時發布多個環境,請寫上當前設置的ssh信息是為哪個環境設置,例如:fjpublish env test,public --ssh public:root@192.168.0.100#123456,若只發布一個環境則可省略。
不過這個命令實際使用很麻煩,不過也免去了把密碼寫在配置文件的擔憂。
3.免密發布(安全等級 ★★★)fjpublish配置文件中的ssh選項完全就是ssh2庫的選項,那么熟悉ssh登錄服務器的同學應該知道可以免密登錄服務器。
原理就是把本地的公鑰放到服務器的授信文件中,下次再登錄服務器時將不再需要密碼。下面簡單描述操作步驟:
使用ssh-keygen -b 1024 -t rsa生成一對‘不帶密碼’的公私鑰;
把其中的公鑰內容附加到服務器的~/.ssh/authorized_keys中;
好了,現在你可以每次ssh登錄服務器都不需要服務器密碼了。
原諒我寫得那么草率,因為這個過程不是我要說的重點,而且我也為你準備了一篇文章,也可以自行多谷歌幾篇"免密登錄服務器"的文章。
另外,fjpublish也有一個fjpublish auth
那么對應fjpublish的配置文件需要改為如下配置:
module.exports = { modules: [{ name: "測試環境", env: "test", ssh: { host: "12.23.345.678", username: "root", //rc版本的user選項和userName選項請在未來統一配置為username //privateKey為認證在服務器的公鑰對應的私鑰地址,請靈活變通 privateKey: require("fs").readFileSync("/Users/manman/.ssh/id_rsa") //mac用戶舉例 privateKey: require("fs").readFileSync("C:/User/manman/.ssh/id_rsa") //window用戶舉例 privateKey: require("fs").readFileSync(`${require("os").homedir()}/.ssh/id_rsa`) //通用寫法 }, buildCommand: "build", localPath: "example", remotePath: "/www/example", }], }
這樣配置,即使你的配置文件不小心泄漏出去,但是沒拿到你的私鑰文件也是無法登陸服務器的。
不過較真來說,這對于fjpublish的開發者及依賴庫的開發者而言私鑰文件還是可以讀取到的,不能算絕對安全。(我發誓我沒有寫后門,我也害怕依賴庫的開發者竊取我的私鑰)
其實說是進階版,無非這次是生成一對帶密碼的公私鑰,這樣每次ssh登錄服務器需要輸入的是私鑰的密碼,而不是服務器的密碼。
對應fjpublish的配置文件中ssh項需要改為如下配置:
module.exports = { modules: [{ name: "測試環境", env: "test", ssh: { host: "12.23.345.678", username: "root", //rc版本的user選項和userName選項請在未來統一配置為username //privateKey為認證在服務器的公鑰對應的私鑰地址,請靈活變通 privateKey: require("fs").readFileSync("/Users/manman/.ssh/password") //mac用戶 privateKey: require("fs").readFileSync("C:/User/manman/.ssh/password") //window用戶 privateKey: require("fs").readFileSync(`${require("os").homedir()}/.ssh/password`) //通用寫法 passphrase: "123456" //私鑰的密碼 }, buildCommand: "build", localPath: "example", remotePath: "/www/example", }], } ...
不過這樣一樣沒有做到絕對的安全,請接著往下看。
5.終極大招(安全等級 ★★★★★)是時候放出大招了,這是方法4的升級版,對于私鑰中的密碼,可以不用寫入配置文件中,我們可以使用ssh代理(ssh-agent)先在本機記錄私鑰密碼,這樣發布時就不需要私鑰密碼也不需要服務器密碼。
簡單介紹一下,ssh-agent是一個用來幫你記住私鑰密碼的程序,它是OpenSSH中默認包括的ssh代理程序,因為篇幅有限,所以這里不介紹如何配置ssh-agent,請一定一定要看這篇文章。這時fjpublish的配置文件要改為這樣:
module.exports = { modules: [{ name: "測試環境", env: "test", ssh: { host: "12.23.345.678", username: "root", //rc版本的user選項和userName選項請在未來統一配置為username agent: process.env.SSH_AUTH_SOCK, agentForward: true, }, buildCommand: "build", localPath: "example", remotePath: "/www/example", }], }
這樣,再也不用擔心密碼泄露了,不過一路下來配置的過程是繁雜的,通常做到第四點已經很安全了,連大名鼎鼎的xshell都被爆出有后門,那么還有什么是絕對安全的呢。
文件操作安全fjpublish就像一個黑盒,用戶只管設置配置文件,而后fjpublish就會完成既定任務,那么問題就來了,如果配置不正確會不會對本地計算機或者遠程服務器的文件造成不可挽回的損壞呢。事實上fjpublish中寫了很多關鍵的判斷,也專門開發了一個--check選項來進行檢查,如果第一次使用有點忐忑不安,可以使用這個功能檢測一下。
例如下面的配置:
module.exports = { modules: [{ name: "測試環境", env: "test", ssh: { host: "192.168.0.xxx", username: "root", //rc版本的user選項和userName選項請在未來統一配置為username password: "123456" }, remotePath: "/abc", }], completeHook(fj) { console.log(fj._metadata.modules.test); }, }
很明顯這個配置文件是有以下問題:
buildCommand未設置;
localPath或localPathEntries沒有設置其中之一;
remotePath遠程文件路徑是不安全的路徑(非二級目錄以上的絕對路徑)。
那么我們敲入命令fjpublish env test --check,這時fjpublish會跳過所有中間件文件操作的流程,只執行其中的參數判斷的部分,然后在最先檢測到錯誤的地方就停止并拋出錯誤,你可以試一試并逐一改正再試試。
如果你的參數配置正確,那么你可以關注一下completeHook這個鉤子函數打印出的數據,其中"_commands"就是表示將要在遠程環境執行的命令,如果沒有危險操作,那么就是ok的。
其實說得再安全都是廢話,而且有些錯誤只在運行時才能發現,所以最保險的方式為:請先在測試環境試用fjpublish?。?!
結語感興趣的童鞋可以直接移步官方文檔了解更多,別忘了在github上給我點個star哦。
下一期我們將談論如何使用fjpublish進行拓展,解鎖更多功能,拜拜∩__∩y。
fjpublish官方交流群:608809145
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89858.html
摘要:任務描述使用的來發布多個目錄使用的忽略所有結尾的文件。任務描述使用的配置項在項目發布后重啟進程忽略當次構建過程并提交一次使用的配置項設置每個遠程命令超時時間為秒。下一期地址使用發布前端項目安全篇官方交流群 本系列文章共分為基礎篇,安全篇,拓展篇。 前言 曾幾何時,我相信部分Web Developer(包括我)使用的項目發布方式比較傳統(使用xftp或者sublime text的插件sf...
摘要:簡介是一款通過配置文件就能完成發布項目到各個環境的命令行工具,意在創建可靠舒適的發布項目體驗,同時它也有豐富的和完善的可拓展能力,讓開發者輕松定制項目發布流程。 fjpublish簡介 fjpublish是一款通過配置文件就能完成發布項目到各個環境的命令行工具,意在創建可靠舒適的發布項目體驗,同時它也有豐富的API和完善的可拓展能力,讓開發者輕松定制項目發布流程。 前言 曾幾何時,我相...
摘要:上一篇基于的中間件架構三規則和讀取地域信息模塊服務一基礎介紹基礎語法運行方式一命令方式二腳本注釋變量循環判斷開發環境參考編譯安裝模塊調用模塊指令和調用的接口灰度發布介紹配置二常見問題的使用和的區別獲取用戶的真是三性能優化性能優化考慮點測 上一篇:基于Nginx的中間件架構(三):Rewrite規則、secure_link和Geoip讀取地域信息模塊、HTTPS服務 一、Lua基礎 1....
摘要:上一篇基于的中間件架構三規則和讀取地域信息模塊服務一基礎介紹基礎語法運行方式一命令方式二腳本注釋變量循環判斷開發環境參考編譯安裝模塊調用模塊指令和調用的接口灰度發布介紹配置二常見問題的使用和的區別獲取用戶的真是三性能優化性能優化考慮點測 上一篇:基于Nginx的中間件架構(三):Rewrite規則、secure_link和Geoip讀取地域信息模塊、HTTPS服務 一、Lua基礎 1....
摘要:安全相關配置可按需調整,操作時建議做好記錄和備份修改配置文件后需要重啟服務才能生效。更改默認端口使用默認端口,容易被黑客利用,為了安全,需要將遠程登錄端口從改為自定義端口。禁止用戶登錄需要提前創建新用戶并將其添加進管理權限組。SSH 安全相關配置可按需調整,操作時建議做好記錄和備份?。?!修改配置文件后需要重啟 sshd 服務才能生效。service sshd restart更改 SSH 默認...
閱讀 1080·2021-11-23 09:51
閱讀 2421·2021-09-29 09:34
閱讀 3161·2019-08-30 14:20
閱讀 1073·2019-08-29 14:14
閱讀 3191·2019-08-29 13:46
閱讀 1087·2019-08-26 13:54
閱讀 1644·2019-08-26 13:32
閱讀 1437·2019-08-26 12:23