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的版本信息