diff --git a/src/contexts/ssh/ssh.go b/src/contexts/ssh/ssh.go index 04e24ee6..2ea7ac87 100644 --- a/src/contexts/ssh/ssh.go +++ b/src/contexts/ssh/ssh.go @@ -35,7 +35,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", Configs: map[string]*ctx.Config{ "node": &ctx.Config{Name: "node", Value: map[string]interface{}{}, Help: "节点信息"}, "cert": &ctx.Config{Name: "cert", Value: map[string]interface{}{}, Help: "用户信息"}, - "trust": &ctx.Config{Name: "trust", Value: map[string]interface{}{"fresh": true, "user": true, "up": true}, Help: "可信节点"}, + "trust": &ctx.Config{Name: "trust", Value: map[string]interface{}{"fresh": false, "user": true, "up": true}, Help: "可信节点"}, "timer": &ctx.Config{Name: "timer", Value: map[string]interface{}{"interval": "10s", "timer": ""}, Help: "断线重连"}, }, Commands: map[string]*ctx.Command{ @@ -292,6 +292,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", } else { m.Log("warn", "user error of %s", m.Option("user.route")) + m.Echo("user error") return } m.Log("info", "username: %s", m.Option("username")) diff --git a/usr/wiki/自然/编程/终端工具链/context.md b/usr/wiki/自然/编程/终端工具链/context.md index a2e22482..2ed53d41 100644 --- a/usr/wiki/自然/编程/终端工具链/context.md +++ b/usr/wiki/自然/编程/终端工具链/context.md @@ -372,14 +372,78 @@ chat模块提供了信息管理。 #### 执行命令 ### 通信框架 #### 节点路由 +每个节点在启动时,自动向上级注册,生成一个动态域名,作为本节点的地址。 +如com.mac.led,led的上级节点是mac,mac的上级节点是com。 +其它节点,就可以通过个这个地址查找到此节点。 + +在调用远程命令时,通信模块根据远程地址的第一个字段,查找子节点,查取成功后,会将剩余的地址与命令发送给查到的子节点。 +子节点收到地址与命令后,继续查找子节点,直到目标节点收到命令,然后将执行结果原路返回。 + +在查找的过程中,如果没有查找到子节点,则会传给上级节点重新处理。 + #### 节点认证 -- text.hash -- node.sign -- user.sign -- work.name +**节点加密** +每个节点都有证书与密钥。每个节点在发送命令时,都会用自己的密钥签名,目标节点都会用它的证书验签。以此保证命令来源的可靠性。 + +**节点类型** + +- 初始节点,没有归属的节点 +- 主控节点,有用户证书与密钥的节点 +- 从属节点,有用户证书的节点 + +- 代理节点,主控节点指定的代理节点 +- 共享节点,允许多个用户控制的节点 +- 认证节点,专门用来存放与查询用户证书的节点 + +用户在某一设备上添加自己的证书与密钥,此节点即为主控节点。 在其它节点上绑定自己的证书,此即为从属节点。 + +主控节点就可任意控制从属节点,从属节点不能控制主控节点,从属节点之间也不能相互控制。 + +主控节点可以指定代理节点,代理节点可以代替主控节点控制从属节点。 + +共享节点,会有多个用户,可能产生冲突,所以需要认证节点协调。 + +访问共享节点前,需要向认证节点注册,共享节点会从认证节点取出访问用户的信息。 + +#### 节点权限 + +***角色*** + +每个访问用户,都会指定一个角色。 +主控节点的用户默认有root权限。即拥有设备的所有控制权限。 + +认证节点的用户默认有tech权限。一般是部分功能。 + +其它节点的用户默认有void权限。即拥有最小集合的权限,一般是只读的命令。 + +***组件*** + +组件是功能的集合,远程访问至少要有remote与source组件的权限才可以执行命令。 + +每个角色下都会有多个组件的权限。 + +***命令*** + +命令就节点向外提供功能的最小单元。 + +每个组件下都会有多条命令。 + +***规则*** + +每条命令内部可以用组件与命令的权限机制自定义权限检查。 + +权限的分配完全由主控节点与从属节点自己配置,其它节点不许配置。 + +***示例*** + +如下配置,用户shy的角色是tech,角色tech下有两个组件remote与source,每个组件下都有命令pwd与dir,所以用户shy就可以远程调用命令dir与pwd +``` +role tech user shy +role tech componet remote command pwd dir +role tech componet source command pwd dir +``` -#### 节点服务 ### 存储引擎 #### 配置 #### 缓存