saltapi執行腳本
㈠ saltstack有沒有api執行mysql語句
[plain] view plain yum -y install salt-api pyOpenSSL chkconfig salt-api on 二、配置salt-api 修改/etc/salt/master文件 [html] view plain sed -i '/#default_include/s/#default/default/g' /etc/salt/master mkdir /etc/salt/m
㈡ pip包中沒有salt-api怎麼辦
Win + R 打開運行窗口,輸入cmd回車,打開命令行窗口 找到pip安裝路徑。 python2/Python3安裝路徑是相同的,都在x:\Python xx\Scripts路徑下 拖動pip主應用程序到命令行窗口,直至命令行窗口增加了如下代碼 輸入「install + 模塊/包名」,注意中間...
㈢ Windows未成功關閉。如果這是由於系統無響應,或者是為保護數據而關閉系統...這怎麼辦
適用於 linux 的 Windows 子系統中的 Visual Studio Code 伺服器使用本地 WebSocket WebSocket 連接與遠程 WSL 擴展進行通信。網站中的 javaScript 可以連接到該伺服器並在目標系統上執行任意命令。目前該漏洞被命名為CVE-2021-43907。
這些漏洞可以被用於:
本地 WebSocket 伺服器正在監控所有介面。如果允許通過 Windows 防火牆,外部應用程序可能會連接到此伺服器。
本地 WebSocket 伺服器不檢查 WebSocket 握手中的 Origin 標頭或具有任何身份驗證模式。瀏覽器中的 JavaScript 可以連接到該伺服器。即使伺服器正在監控本地主機,也是如此。
我們可以在特定埠上生成一個Node Inspector示例,它還監控所有介面。外部應用程序可以連接到它。
如果外部應用程序或本地網站可以連接到這些伺服器中的任何一個,它們就可以在目標計算機上運行任意代碼。
Visual Studio Code 庫是不斷更新的。我將使用一個特定的提交 ()。
$ git clone https://github.com/microsoft/vscode $ git reset --hard
我們可以使用 Code (lol) 來導航源代碼。事實上,我已經在 WSL 中為這個漏洞創建了具有相同擴展名的概念驗證。
Visual Studio Code在 WSL 內以伺服器模式運行,並與 Windows 上的代碼示例對話(我稱之為代碼客戶端)。這使我們可以在 WSL 中編輯文件和運行應用程序,而不需要運行其中的所有內容。
遠程開發架構
可以通過 SSH 和容器在遠程計算機上進行遠程開發。GitHub Codespaces 使用相同的技術(很可能通過容器)。
在 Windows 上使用它的方法:
1.打開一個WSL終端示例,在Windows上的代碼中應該可以看到遠程WSL擴展;
2.在 WSL 中運行code /path/to/something;
3.如果未安裝代碼伺服器或已過時,則會下載它;
4.VS Code 在 Windows 上運行;
5.你可能會收到一個 Windows 防火牆彈出窗口,用於執行如下所示的可執行文件:
伺服器的防火牆對話框
這個防火牆對話框是我執行失敗的原因。出現該對話框是因為 VS Code 伺服器想要監控所有介面。
從我信任的Process Monitor開始:
1.運行進程監控器;
2.在WSL中運行code .;
3.Tools > Process Tree;
4.我運行代碼(例如,Windows Terminal.exe)的終端示例中運行Add process and children to Include filte。
Procmon 的進程樹
經過一番挖掘,我發現了 VSCODE_WSL_DEBUG_INFO 環境變數。我只是在 WSL 中將 export VSCODE_WSL_DEBUG_INFO=true 添加到 ~/.profile 。運行伺服器後我們會得到額外的信息。
VSCODE_WSL_DEBUG_INFO=true
輸出被清理。
檢查命令行參數。
可以看到出現了WebSocket詞彙。
運行 Wireshark 並捕獲loopback介面上的流量。然後我再次在 WSL 中運行代碼。這次可以看到兩個 WebSocket 握手。
在 Wireshark 中捕獲的 WebSocket 連接
該運行中的伺服器埠是63574,我們也可以從日誌中看到。在 Windows 上的代碼客戶端中打開命令面板 (ctrl+shift+p) 並運行 > Remote-WSL: Show Log。
遠程 WSL:顯示日誌
最後一行有埠:在 http://127.0.0.1:63574/version 上打開本地瀏覽器。我們還可以看到從 Windows 上的 Code 客戶端到伺服器的兩個單獨的 WebSocket 連接。
伺服器是位於 /src/vs/server/.ts#L207 的 的一個示例。
它被 createServer 在同一個文件中使用,我們可以使用 Code (lol) 找到它的引用並追蹤到 remoteExtensionHostAgent.ts(同一目錄)。
可以根據注釋查看 main.js 內部。
打開文件,看到伺服器可以從傳遞給main.js的參數中獲得主機和埠。
main.js 被 server.sh 調用:
沒有 IP 地址傳遞給腳本,我認為這就是為什麼伺服器監控所有有趣的事情。port=0 可能告訴伺服器使用臨時埠,此信息來自同一目錄中的 wslServer.sh。
每次看到本地 WebSocket 伺服器時,都應該檢查誰可以連接到它。
WebSocket 連接不受同源策略約束,瀏覽器中的 JavaScript 可以連接到本地伺服器。
WebSockets 從握手開始,在跨源資源共享或 CORS 的上下文中它始終是一個「簡單」的GET 請求,因此瀏覽器不需要預先請求就可以發送它。
可以快速創建一個嘗試連接到特定埠上的本地WebSocket伺服器的測試頁面,將它託管在某個遠程位置(例如,S3 存儲桶)並在計算機上打開它。如果連接成功,就可以繼續操作了。
我還檢查了 Burp,在 Burp Repeater 中創建了 WebSocket 握手。將 Origin 標頭修改為 https://example.net。如果響應具有 HTTP/1.1 101 交換協議,那麼就可以繼續了。
在 Burp 中測試
注意,這只對本地主機伺服器有影響。這里的伺服器也對外公開,攻擊者不受瀏覽器約束。它們可以直接連接到伺服器並提供任何 Origin 標頭。
接下來是查看 Wireshark 中的流量,右鍵點擊之前的WebSocket握手GET請求,然後選擇 Follow > TCP Stream。我們將看到一個帶有一些可讀文本的屏幕。關閉它,只會看到這個進程的數據包,這允許我們只關注這個進程。
你可能會問為什麼我關閉了僅包含消息內容的彈出窗口,因為沒有用。根據 RFC6455,從客戶端到伺服器的消息必須被屏蔽。這意味著它們與一個 4 位元組的密鑰(也隨消息一起提供)進行了異或運算。Wireshark 在選擇時取消屏蔽每個數據包,但有效載荷在初始進程彈出窗口中顯示為屏蔽。所以我們將看到純文本的伺服器消息,而客戶端消息被屏蔽並出現亂碼。如果你點擊單個消息,Wireshark 就會顯示有效載荷。
我花了幾天時間對協議進行逆向工程。後來,我意識到只能在/src/vs/base/parts/ipc/common/ipc.net.ts 中看到協議的源代碼。
來自伺服器的第一條消息是 KeepAlive 消息。
在協議定義中,我們可以看到不同的消息類型。
在 /src/vs/platform/remote/common/remoteAgentConnection.ts 中,它在代碼的其他部分被稱為 OKMessage 和heartbeat。
客戶端在/src/vs/platform/remote/common/remoteAgentConnection.ts的中處理此問題。客戶端(Windows上的代碼)發送這個包,它是一個KeepAlive和一個單獨的認證消息。
最初,我認為長度欄位是 12 個位元組而不是 4 個位元組,因為其餘的位元組總是空的。然後我意識到只有常規消息使用消息 ID 和 ACK 欄位,而且我只看到了不規則的握手消息。
在修復之前,沒有勾選此選項。
注意:在 2021-11-09 更新之前(commit )客戶端沒有發送數據。但是,使用此提交,我們仍然可以在沒有此密鑰的情況下發送消息並且它會起作用。這是我們給伺服器簽名的內容,以檢查連接到正確的伺服器。
伺服器響應一個簽名請求。
另一個 JSON 對象:
伺服器已經簽名了我們在前一條消息中發送的數據,並用它自己的數據請求進行了響應。
客戶端驗證簽名的數據,以檢查它是否是受支持的伺服器。當創建我們的客戶端時,可以簡單地跳過。
使用options.signService.validate 方法,然後就會得到/src/vs/platform/sign/node/signService.ts。
vsda 是一個用 C++ 編寫的 Node 原生插件,將 Node 原生插件視為共享庫或 DLL。該插件位於 https://github.com/microsoft/vsda 的私有存儲庫中,根據https://libraries.io/npm/vsda/的說法,直到2019年左右,它都是一個NPM包。
它與 VS Code 客戶端和伺服器捆綁在一起:
Windows系統:
C:\Program Files\Microsoft VS Code\resources\app\node_moles.asar.unpacked\vsda\build\Release\vsda.node
伺服器(WSL):~/.vscode-server/bin/{commit}/node_moles/vsda/build/Release/vsda.node。
我找到了https://github.com/kieferrm/vsda-example,並通過一些實驗找到了如何使用它創建和簽名消息。
1.用msg1 = validator.createNewMessage("1234")創建一個新消息,輸入至少4個字元。
2.使用signed1 = signer.sign(msg1)進行簽名。
3.使用 validator.validate(signed1) 對其進行驗證,響應為「ok」。
需要注意的是,如果你創建了新消息,則無法再驗證舊消息。在源代碼中,每條消息都有自己的驗證器。
Linux 版本有符號,大小約為 40 KB。把它放到 IDA/Ghidra 中,應該就可以開始了。
我花了一些時間,想出了這個偽代碼。可能不太正確,但可以讓你大致了解此簽名的工作原理。
1.用當前時間 + 2*(msg[0]) 初始化 srand,它只會創建 0 到 9(含)之間的隨機數;
2.從許可證數組中附加兩個隨機字元;
3.從 salt 數組中附加一個隨機字元;
4.SHA256;
5.Base64;
6.???;
7.Profit。
僅從許可證數組中選擇前 10 個位置的字元,它總是 rand() % 10 ,但salt 數組翻了一番。
許可證數組的字元串如下所示:
salt 數組的前 32 個位元組(查找 Handshake::CHandshakeImpl::s_saltArray)是:
我從來沒有真正檢查過我的分析是否正確,不過這無關緊要,知道如何使用插件簽名消息,這就足夠了。
接下來,客戶端需要簽名來自伺服器的數據並將其發送回來,以顯示它是一個「合法」的代碼客戶端。
伺服器響應如下:
客戶端發送了如下消息:
提交應該匹配伺服器的提交哈希。這不是秘密。這可能是最後一個穩定版本提交(或最後幾個之一)。這只是檢查客戶端和伺服器是否在同一版本上。它也可以在 http://localhost:{port}/version 上找到,你的瀏覽器 JavaScript 可能無法看到它,但外部客戶端沒有這樣的限制。
signedData是對我們在前面消息中從伺服器獲得的數據進行簽名的結果。
Args是此消息中最重要的部分,它可以告訴伺服器在特定埠上啟動一個 Node Inspector 示例。
break: 啟動 Inspector 示例後中斷。
埠:檢查器示例的埠。
Env:傳遞給檢查器示例進程的環境變數及其值的列表。
Node Inspector 示例可用於調試 Node 應用程序。如果攻擊者可以連接到你計算機上的此類示例,那麼攻擊就成功了。2019 年,Tavis 發現 VS Code 默認啟用了遠程調試器。
整個設置旨在允許 Windows 上的代碼客戶端在 WSL、容器或 GitHub 代碼空間中進行遠程開發。這意味著它可以在遠程計算機上做任何想做的事情。
因此,如果網站可以連接到你本地的 WebSocket 伺服器並繞過 DRM,它就可以模擬代碼客戶端。它可以在你的系統上遠程執行代碼,並且不需要 Node Inspector 示例。
到目前為止,我們已經找到了兩種利用該系統的方法:
生成並連接到 Node Inspector 示例;
模擬代碼客戶端並使用自定義協議與遠程計算機交互;
Node Inspector示例
讓我們看看前面消息中的參數, /src/vs/server/.ts 在伺服器上處理它們。
介面類似於我們之前看到的 JSON 對象:
_updateWithFreeDebugPort檢查埠是否空閑,如果沒有,它將嘗試接下來的10個埠。最後一個空閑埠存儲在startParams.port中。
選擇的埠被發送回客戶端,所以我們知道去哪裡:
最後,它在 /src/vs/server/extensionHostConnection.ts 中調用con.start(startParams);。
這看起來很復雜,讓我們來分析一下:
1.Node Inspector 示例將監聽 0.0.0.0:debugPort,這很危險,如果用戶接受 Windows 防火牆對話框,它將在外部可用;
2.我們也可以注入 Inspector 的環境變數;
3.removeDangerousEnvVariables 方法不是安全過濾器,只是刪除 DEBUG、DYLD_LIBRARY_PATH 和 LD_PRELOAD 環境變數(如果存在)以防止崩潰。
什麼是Node Inspector?
它可以用來調試Node進程。有一些客戶端和庫支持這一點,但通常,我使用Chromium內置的專用節點DevTools (chrome|edge://inspect)。
連接到 Inspector 示例後,我們可以打開控制台並運行 require('child_process').exec('calc.exe');。盡管我們使用的是wsdl,但它仍然有效。
瀏覽器中的 JavaScript 無法連接到 Inspector 示例,客戶端使用另一個 WebSocket 連接與示例對話。但是,我們需要知道調試器會話 ID。
/json/列表
瀏覽器中的 JavaScript 可以發送此 GET 請求,但由於 SOP(響應沒有 Access-Control-Allow-Origin 標頭)而無法看到響應。其他客戶端則沒有這個限制,因為檢查器在外部可用,我們可以從外部連接到它。
現在,我創建了一個簡單的概念驗證:
1.打開一個網站並輸入埠(我們可以掃描它,但手動輸入它會更快)。
2.網站中的 JavaScript 完成握手。
3.我使用 /sign API 創建了一個 Node 應用程序,這樣就可以使用 vsda 插件。
4.一旦生成Node Inspector 示例,第二個 API 就會被 debugPort 調用。
5.使用 chrome-remote-interface 庫的 Node 應用程序連接到 Inspector 示例並運行 calc。
你可以通過以下鏈接看到源代碼:
https://github.com/parsiya/code-wsl-rce https://github.com/parsiya/Parsia-Code/tree/master/code-wsl-rce
模擬代碼客戶端
創建客戶端並使用協議連接到伺服器的代碼位於 VS Code GitHub 存儲庫中,這需要大量的復制/粘貼和解析,我只花了幾個小時。
如果要創建一個快速的概念驗證,應該滿足一些假設:
1.找到本地的 WebSocket 埠;
2.從外部連接到Node Inspector示例;
查找本地 WebSocket 埠並不難,從瀏覽器掃描本地伺服器並不是什麼新鮮事。伺服器也可以從外部使用,因此我們不受那裡的瀏覽器約束。
Chrome 限制不起作用,因為 WebSocket 伺服器需要一個網路伺服器來處理握手。我也很好奇 WebSocket 節流是 Chrome 特定的保護還是 Chromium 的一部分。
有趣的是,Chrome 瀏覽器有一個保護機制,可以防止惡意行為者暴力破解 WebSocket 埠,它在第 10 次嘗試後開始節流。不幸的是,這種保護很容易被繞過,因為擴展的 HTTP 和 WebSocket 伺服器都在同一個埠上啟動。這可用於通過向 img 標簽添加 onload 處理程序來檢查特定本地主機埠上的圖片是否存在來強制所有可能的本地埠。
也就是說,這是一個開發環境,用戶可能整天都在 WSL 中開發並且從不關閉他們的瀏覽器選項卡,因此如果他們打開我們的網站,我們就有可能找到它。
連接到Node Inspector示例是另一回事,我們無法從瀏覽器執行此操作,因此我們需要我們的伺服器可以訪問受害者的計算機。
第二種利用方法(模擬代碼客戶端)沒有這些限制,因為瀏覽器可以與本地伺服器通信並執行所有操作。它只需要我們對協議進行逆向工程並找出要發送的正確消息。
當你收到 WebSocket 升級請求時,請根據許可名單檢查 Origin 標頭。代碼客戶端在該標頭中發送 vscode-file://vscode-app,以便我們可以使用它來操作。
參考及來源:https://parsiya.net/blog/2021-12-20-rce-in-visual-studio-codes-remote-wsl-for-fun-and-negative-profit/
㈣ saltstack 和 salt-api有什麼不同個
0.16.0版本的發布,帶來了minion可以連接多Master的特性. 這種方式稱為多master( multi-master )配置, 使環境中的SaltStack冗餘。
㈤ salt可以執行python腳本嗎
利用saltstacksalt.client模塊python命令行或者python腳本執行相應salt命令
master端想要執行類似 salt '*' cmd.run 'uptime' saltclient寫
importsalt.client
local=salt.client.LocalClient()
local.cmd('*','cmd.run',['uptime'])
放台執行返jid
cmd_async('*','cmd.run',['uptime'])
㈥ 目前全棧工程師常用的軟體有哪些
cs201 全棧軟體工程師免費下載
鏈接:https://pan..com/s/1uvC9DjwH3O3qemDwhmO_OA
全棧工程師是指掌握多種技能,勝任前端與後端,能利用多種技能獨立完成產品的人。
㈦ 求 JS 百度翻譯API 示例 誰能給我一個..
這段時間研究一下網路翻譯API,結果發現新版的網路翻譯較以前的有了很大的變化:
舊版網路翻譯的URL地址:
http://openapi..com/public/2.0/bmt/translate?client_id=YourApiKey&q=today&from=auto&to=auto
參數只需要:client_id(API key),q(翻譯的內容),from(源語言語種:語言代碼或auto),to(目標語言語種:語言代碼或auto);
新版網路翻譯的URL地址:
http://api.fanyi..com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=
參數需要:q(翻譯的內容),from(翻譯源語言 ,可設置為auto),to(譯文語言,不可設置為auto),appid (API key)
salt(隨機數),sign(簽名);
簽名sign生成的方法是:
1、將請求參數中的 APPID(appid), 翻譯query(q, 注意為UTF-8編碼), 隨機數(salt), 以及平台分配的密鑰(可在管理控制台查看)
按照 appid+q+salt+密鑰 的順序拼接得到字元串1。
2、對字元串1做md5,得到32位小寫的sign。
自己從網上找了一個MD5的加密演算法,英文還算正常,但是出現漢字的時候,就會返回一條:
{「error_code」:」54001」,」error_msg」:」Invalid Sign」}
找到錯誤碼列表:
54001 簽名錯誤 請檢查您的簽名生成方法
沒辦法,看了一下網路翻譯提供的demo:
PHP 版、JS 版、Python 版、C 版
Java呢??木有。。。。。坑爹。。。於是乎JS。。。是不是可以轉為Java???經過兩天的奮斗。。。。於是乎。。。我放棄了。。。在網上搜尋了一番,返現Java 1.6之後可以直接調用js文件,經過一番調試終於成功了。。。
代碼如下:
import java.io.FileReader;
import java.util.Date;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class TestMD5 {
public static void main(String[] args) {
String APPID = "APPID"; // 需要改成自己的APP ID
String KEY = "KEY"; //需要改成自己的密鑰
String SALT = Long.toString(new Date().getTime());//隨機數,官方提供的是獲取時間
String SOURCE = "足球";//翻譯內容
String SIGN = "";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
String jsFileName = "md5.js"; // 讀取js文件
FileReader reader;
try {
reader = new FileReader(jsFileName);
engine.eval(reader);
if (engine instanceof Invocable) {
Invocable invoke = (Invocable) engine; // 調用merge方法,並傳入兩個參數
System.out.println(APPID + SOURCE + SALT + KEY);
SIGN = (String) invoke.invokeFunction("MD5",
APPID + SOURCE + SALT + KEY);
System.out.println(SIGN);
}
reader.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 執行指定腳本
}
}04142430414243
運行的結果:
網路提供的MD5在線生成(http://app..com/yiten_md5)的結果:常規md5加密($pass)
32位MD5大寫:
32位MD5小寫:
16位MD5大寫:DCD9034CB0206EFD
16位MD5小寫:dcd9034cb0206efd
㈧ 怎樣用百度,有道翻譯API開發自己的翻譯軟體
先在網路翻譯API介面頁面申請介面的使用。點擊申請接入。
進入到申請頁面後,我們按照要求填寫好相關內容。因為我們是個人使用,所以選擇個人開發者,而且當月翻譯字元數200W以下免費,夠用了。
在點擊提交申請後,可以看到一些我們需要的信息。這些是我們待會要寫代碼用到的信息。
點擊申請接入成功提示頁面下面的接入文檔,可以看到詳細的使用說明。
通過點擊 管理控制台 可以看到很多信息,包括我們剛才申請的信息。
好的,萬事具備,只差代碼了。下面把python3的代碼貼出來,然後運行下看看效果如何:
import hashlib
import urllib.request
import json
import random
appid = '20161120000032362'
secretKey = '這里是你申請的密鑰'
httpClient = None
myurl = 'http://api.fanyi..com/api/trans/vip/translate'
q = 'hello'
fromLang = 'en'
toLang = 'zh'
salt = random.randint(32768, 65536)
sign = appid+q+str(salt)+secretKey
m1 = hashlib.md5()
m1.update(sign.encode(encoding='utf-8'))
sign = m1.hexdigest()
myurl = myurl+'?appid='+appid+'&q='+urllib.parse.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
response = urllib.request.urlopen(myurl).read().decode('utf8')
getJson = json.loads(response)
getInfo = getJson['trans_result']
s=getInfo[0]
re=s['dst']
print(re)
7
有道翻譯api的過程大同小異,童鞋可以自行研究。我的Linux系統中的命令行翻譯工具就是利用有道翻譯api和python寫的,方便簡單。
㈨ python腳本中怎麼運行saltstack命令
利用saltstack的salt.client模塊可以在python的命令行下或者python腳本里執行相應的salt命令
master端想要執行類似 salt '*' cmd.run 'uptime' 在saltclient里可以這么寫
importsalt.client
local=salt.client.LocalClient()
local.cmd('*','cmd.run',['uptime'])
也可以放到後台執行只返回一個jid
cmd_async('*','cmd.run',['uptime'])
得到jid可以通過get_cache_returns(jid)方法來獲取執行結果,在沒有執行完成以前是為空的所以可以寫一個while來一直讀取結果直到讀取到或者超出規定時間為止
importsalt.client
local=salt.client.LocalClient()
t=0
㈩ 如何使用Salt 的各種狀態值
salt的安裝:
master端:
#yum install salt-master -y salt主控端安裝
# vim /etc/salt/master salt主配置文件修改
interface: 服務監聽IP
auto_accept: True(可選,key通過『salt-key -a keyname』命令手動進行認證)
注意:keyname 就是客戶端中設置的id標識(可以查看salt-minion端的配置)
#salt-master -l debug debug模式,查看salt都進行哪些操作
#/etc/init.d/salt-master restart 重啟salt服務
#/etc/init.d/salt-master status 查看狀態
#netstat -antlp | grep 4505 確保消息發布埠正常
#netstat -antlp | grep 4506 確保客戶端與服務端通信埠正常
#/etc/init.d/salt-master restart
# /etc/init.d/salt-master status
# salt-key 查看認證相關信息
# salt-key -a wy-pe2 手動添加認證key(給wy-pe2主機添加認證)
#iptables -F 關閉防火牆以免影響認證
#salt-key -a wy-pe2
#salt-key -L 查看認證信息(會有顯示已經認證和未認證的相關信息)
[root@wy-pe1 ~]# salt-key -L
Accepted Keys:
wy-pe2 已經允許的key(表示wy-pe2已經允許認證了)
Unaccepted Keys:
Rejected Keys:
#cd /etc/salt/pki/master/minions 在master中的minions目錄中生成認證的key
#setenforce 0 暫時關閉selinux
#/etc/init.d/salt-master restart
執行遠程命令(使用salt內建的模塊):
#salt 『wy-pe2′ test.ping 測試master和minion進行通信(在master端進行ping響應測試)
[root@wy-pe1 ~]# salt 『wy-pe2′ test.ping 如果能ping通,則為True
wy-pe2:
True
#lsof -i:4505 查看到minion端都和4505保持建立
[root@wy-pe1 ~]# lsof -i:4505
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 8568 root 12u IPv4 63217 0t0 TCP *:4505 (LISTEN)
salt-mast 8568 root 14u IPv4 65101 0t0 TCP wy-pe1:4505->wy-pe2:51237 (ESTABLISHED)(表示建立連接了)
注意:如果認證那塊沒做好,就會影響相關的鏈接
客戶端安裝:
minion端安裝配置:
#yum install salt-minion -y
#vim /etc/salt/minion 修改minion客戶端主配置
master: 服務端主機名
id: 客戶端主機名(其實也就是認證key的名字) 用來和master進行認證
#/etc/init.d/salt-minion restart 重啟服務
#cd /etc/salt/pki/minion/ 在這個目錄底下會生成兩個認證文件(minion.pub minion.pem)
salt-minion端不能正常啟動的解決步驟:(一般就是iptables和selinux的影響)
#/etc/init.d/salt-minion restart
# tail -f /var/log/messages
#/etc/init.d/salt-minion restart
#iptables -F
#tail -f /var/log/salt/minion
#salt-minion -l debug
#setenforce 0
#/etc/init.d/salt-minion restart
安裝完畢,在master和minion認證完畢之後會在minion主機上的/etc/salt/pki/minion/目錄底下生成新的minion_master.pub
問題1:檔master和minion進行認證的時候,master沒有接收到public key(minion)
(這個在後來的鏈接過程中會造成master和minion不能鏈接)
問題2:輔機salt-minion總是在查看服務狀態的時候顯示失敗(but pid exits!)
# salt-minion -l debug 查看salt客戶端詳細信息
salt的簡單使用:
salt可以直接讓minion執行模塊命令,也可以直接執行shell命令
1.salt -C 『wy-pe1 and wy-pe2 or wy-peN』 test.ping -C表示多參數(表示在測試多台主機的存活狀態)
# salt 『*』 disk.usage 查看磁碟使用情況(使用內建模塊查看所有minion端的磁碟使用情況)
#salt 『*』 cmd.run 『df -h』 使用cmd.run直接調用遠程shell命令(功能同上)
# salt 『*』 cmd.run 「cat /root/lall」 查看客戶端主機的/root/lall文件
2.nodegroup對minion進行分組:
nodegroups:
group1: 『[email protected],bar.domain.com,baz.domain.com or bl*.domain.com』
group2: 『G@os :Debian and foo.domain.com』
group3:』wy-pe2′
進行分組測試:
# salt -N group3 test.ping
wy-pe2:
True
3.grains對minion基本信息的管理:
salt 『wy-pe2′ grins.ls 查看grains分類
salt 『wy-pe2′ grins.items 查看minnon基本信息(硬體參數)
4.pillar對敏感信息的管理,只有匹配到的節點才能獲取和使用
默認pillar數據定義文件存儲路徑:/srv/pillar
狀態管理:
1.salt基於minion進行狀態的管理(state)
類似於pupet的pp文件功能,salt的state文件擴展文件名為.sls,採用的是和puppet一樣的設計思路。即以master
端的文件狀態來確定minion端的一些狀態信息設置。(安裝的軟體包,服務的運行狀態以及需要同步的文件配置)
注意:salt默認的根目錄在/srv/salt中,如果沒有需要進行建立。
top.sls:這個文件類似於puppet的site.pp文件,作為「最高同步」操作的入口文件,執行「最高同步」操作時,將從此sls文件中獲取狀態對minion進行同步
示例:(注意,salt文件完全採用ymal格式,對代碼的縮進有著嚴格的要求)
#vim /srv/salt/servers_package.sls
httpd: 項目名
pkg: 類型
– installed 動作(表示安裝httpd包)
service:
– running
– enable:True
vim-enhanced:
pkg:
– installed
tomcat環境
openjdk-7-jdk:
pkg:
– installed
tomcat7:
pkg:
– installed
– require:
– pkg: openjdk-7-jdk
# salt 『wy-pe2′ state.sls servers_package 按照sls文件中的配置對wy-pe2進行服務配置
管理配置文件
httpd:
pkg:
– installed
file.managed: 文件管理(文件同步操作)
– name: /etc/httpd/conf/httpd.conf
– source: salt://httpd/httpd.conf
# salt 『wy-pe2′ state.highstate 應用修改(給minion永久添加狀態)
3.使用salt schele對minion進行實時更新,讓minion自覺的保持某個狀態
4.實時管理
有時候我們需要臨時的查看某個機器上的某個文件,或者執行某個命令
cmd.run方式:(salt 『$targeting』 cmd.run 『$cmd』)用來遠程執行shell命令
# salt 『wy-pe2′ cmd.run 『ifconfig eth0′ 查看某台主機的網路介面
cmd.script方式:可以向遠程主機執行腳本
#salt 『*』 cmd.script salt://useradd.sh 向minion主機上執行useradd.sh腳本(salt://是salt的默認發布目錄,即/srv/salt)
pkg.install方式:制定主機安裝軟體
#salt 『wy-pe2′ pkg.install vsftpd 指定主機安裝軟體
# salt 『*』 network.interfaces 查看遠程主機介面
# salt-cp 『wy-pe2′ salt-cmd /home/xxb2 復制文件到指定的系統上(當前目錄的salt-cmd)
salt是主命令,一般用來執行命令模塊。
salt-cp用來復制文件到制定的系統上去
salt-key用來和minion之間進行身份驗證
salt-master為服務端的主守護進程用於控制minion
salt-run為前端命令執行
mole方式:(模塊查看方式#salt 『*』 sys.doc)
#salt 『*』 disk.usage 查看磁碟使用情況
# salt 『*』 grains.item os/osrelease/oscodename
# salt 『*』 user(group).info xxb2
# salt 『*』 ip.get_interface eth0
#salt 『*』 lvm.vgdisplay
salt相關管理命令:
salt-run manage.up 查看存活的minion
salt-run manage.down 查看死掉的minion
salt-run manage.down removekeys=True 查看down掉的minion,並將其刪除
salt-run manage.status 查看minion的相關狀態
salt-run manage.versions 查看slat的所有master和minion的版本信息