一般傳統的批量作業(比如批量巡檢、批量修改、批量配置、批量部署等)採取的是ssh證書免密登入、賬號密碼互動登入,第三方元件(如python的saltstack、func主受控端模式)等方式實現對遠端主機的訪問與控制,一旦密碼檔案洩露或主控主機(主控端)被攻破,則相關主機相當於完全開放,系統將面臨極大的危險。
所要解決的技術問題:
解決批量作業過程中,作業主機列表檔案密碼安全性問題;
根據作業主機列表檔案解碼金鑰不同,明確具體作業人員;
依靠不同的作業主機列表檔案,實現對作業範圍的控制問題。
技術方案:
本方法主要分為兩個階段,
與附圖對應,描述軟體的步驟。
將包含主機名(或ip)、賬號、密碼等資訊的主機列表檔案上傳伺服器;
執行指令碼,根據提示輸入加密金鑰;
讀取主機列表檔案a,對賬號、密碼等敏感資訊加密,將加密後的主機列表資訊寫入新的主機列表檔案b;
刪除原主機列表檔案a;
批量作業開始,提示輸入解密金鑰(採用對稱加密,解密金鑰即加密金鑰);
讀取新的主機列表檔案b,獲取到主機名、使用者名稱密文、密碼密文等敏感資訊;同時觸發郵件通知,告知超級管理員作業人員(根據解密金鑰關聯明確)、作業主機列表檔案、作業指令碼型別、作業時間等資訊;
根據操作人員輸入的解密金鑰對使用者名稱、密碼等敏感資訊進行解密,獲取到相應的敏感資訊明文;
使用主機名(或ip)、使用者名稱、密碼明文等敏感資訊,結合sshpass互動工具,登入遠端主機;
在遠端主機上完成相關作業後返回指令碼執行的主機;
對主機列表檔案中下一台主機執行相同作業;
記錄作業日誌,批量作業結束
關鍵技術手段以及對應的有益效果
利用openssl在base64的應用,採用aes-256-cbc加解密演算法結合加密金鑰,對主機列表檔案中的敏感資訊進行加密處理,避免主機資訊洩露;
採用本方法加密的敏感資訊密文,每次加密處理後的密文都不同,較好的防範了對密文的暴力破解;
同一批作業主機列表檔案,可針對不同作業人員分配不同的加解密金鑰,在作業過程中對解密金鑰進行二次加密儲存,明確作業人員,便於事故追責;
批量作業成功觸發,即郵件通知超級管理員,告知作業人員、作業範圍、作業型別等資訊;
對不同作業人員、作業型別,可分配不同的加密後的主機檔案列表和解密金鑰,實現主機範圍和作業人員許可權的雙重控制。
指令碼示例:
#! /bin/bash
####created by 川中鬍子
##加密
encrypt()儲存整個陣列
for s in $
do
if [ $num -eq 0 ];then
ip=$s
elif [ $num -eq 1 ];then
user=$s
else
password=$s
filet num++
done
enc_user=`echo $|openssl aes-256-cbc -k $ -base64`
enc_pwd=`echo $|openssl aes-256-cbc -k $ -base64`
echo "$;$;$" >>hosts.enc
done
}##解密
decrypt()儲存整個陣列
for s in $
do
if [ $num -eq 0 ];then
ip=$s
elif [ $num -eq 1 ];then
enc_user=$s
else
enc_pwd=$s
filet num++
done
user=`echo $|openssl aes-256-cbc -d -k $ -base64`
password=`echo $|openssl aes-256-cbc -d -k $ -base64`
echo "$;$;$" >>hosts.dec
done
}main()
main $1
shell指令碼批量新增使用者
shell指令碼 shell 是命令直譯器 檢視當前系統支援的shell型別 cat etc shells 檢視當前使用shell echo shell 使用者新增 useradd 引數 名字 e 指定使用者失效時間 c 新增使用者備註 在 etc passwd第五字段 d 指定使用者家目錄 使用者...
Shell指令碼 批量建立使用者
格式為 使用者名稱 空格 tab 密碼 就是將資料分為兩列 users.txt文字內容示例 新建文字命令 touch create users.sh 編譯文字命令 vim create users.sh bin bash 批量建立使用者 while read line do 讀取line列表中的資料...
shell指令碼批量建立使用者
bin bash date date f t user file user.txt echo color 如果使用者檔案存在並大小大於0就備份 if s user file then mv user file bak echo color green user file exist,rename b...