Python自動化開發學習12-堡壘機開發
很多人覺得,堡壘機就是跳板機,這是不全面的。跳板功能只是堡壘機所具備的功能的其中一項。堡壘機還有以下兩個至關重要的功能:
- 權限管理 : 用戶使用堡壘機賬號登錄堡壘機系統。不需要知道別的主機的賬號和密碼,都是由堡壘機系統管理的。用戶可以登錄的主機和每臺主機上所擁有的權限也是由堡壘機系統管理的。
- 審計管理 : 用戶的所有操作都是在堡壘機上執行的,所以都會被記錄保存。其實對於操作的結果(就是屏幕上打印的結果),如果需要也是可以記錄保存的。不過一般不那麽做,而且數據量也會有點大。
開源堡壘機項目
號稱沒有好的開源項目,因為底層的SSH還是通過paramiko模塊的長鏈接的ssh實現的。但是這個和原生的ssh比還是不太穩定,不太好用。不適合生產環境。要好用還是得去改原生的ssh,但是我們不會,我們只會改python。總之這章就是實現一個堡壘機的功能,真要做個好用的以後再說吧。
paramiko模塊的長連接
雖然上面說了,用這個模塊不穩定,但是我們也沒辦法,畢竟只會這個。
paramiko之前已經學習過了,不過當時用的都是短連接。即:連接一次,執行一條命令,返回結果,斷開。這裏我們要用長連接。
長連接的代碼在demos文件夾下的demo.py這個文件裏,另外還要用到interactive.py這個文件。安裝模塊的時候不安裝這個demos文件夾,所以我們去github上下下來:
https://github.com/paramiko/paramiko/tree/master/demos
利用demo.py程序,我們可以進行ssh的長連接。下面的開發都是基於這個程序為基礎,在這個程序的基礎上,修改該程序的源碼添加上記錄用戶輸入的代碼,並寫入數據庫。於是審計管理便實現了。
堡壘機構架
任何人只能通過堡壘機登錄設備,堡壘機可以鏈接管理所有的設備:
配置環境變量
還需要確保用戶一登錄堡壘機就進入你的程序,並且不能退出(一退出就退出整個堡壘機),就是只能在你的做的shell下運行,不能進入原生的shell。可以通過設置環境變量實現:
環境變量保存在這裏: ~/.bashrc
,修改文件在最後加上這句: python3 /etc/myJunpServer.py
直接運行你的程序。首次設置完成後如果要讓它立刻生效,可以執行這個命令:source .bashrc
加載最新的配置。
表結構設計
主機表:
id | 主機名 | IP | 端口號 |
---|---|---|---|
自增id | 註釋名稱 | 字符串類型 | 數值類型,默認22 |
主機認證表(和主機表多對多關聯):
id | 名稱 | 用戶名 | 密碼 |
---|---|---|---|
自增id | 註釋名稱 | 用戶名 | 明文的字符串 |
主機群組表(和主機表+主機認證表多對多關聯):
之前的結合表都是結合2張表,這裏要結合3張表。
因為,不同的群組裏可能包含相同的機器,但是不同群組中同一臺機器對應的權限可能不同。
id | 群組名 | 備註 |
---|---|---|
自增id | 唯一 | 備註信息 |
堡壘機賬號表(和主機表多對多關聯,和主機群組表多對多關聯):
id | 用戶名 | 密碼 |
---|---|---|
自增id | 唯一約束 | 加密存儲 |
審計日誌記錄表:
id | 時間 | 用戶id | 主機id | 操作消息 |
---|---|---|---|---|
自增id | 操作時間 | 關聯賬號表的id | 關聯主機表的id | 操作內容 |
大概就是這麽個表結構
Python自動化開發學習12-堡壘機開發