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