1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-04-25 16:58:06 +08:00

mac opt ssh.send

This commit is contained in:
shaoying 2018-10-11 09:27:41 +08:00
parent 0a01fe3f0c
commit ec6d35cc17

View File

@ -120,25 +120,27 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
"send": &ctx.Command{Name: "send [domain str] cmd arg...", Help: "远程执行",
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
if ssh, ok := m.Target().Server.(*SSH); m.Assert(ok) {
domain := ""
origin, domain := "", ""
if len(arg) > 1 && arg[0] == "domain" {
domain, arg = arg[1], arg[2:]
if d := strings.TrimPrefix(domain, m.Cap("domain")); len(d) > 0 && d[0] == '.' {
origin, arg = arg[1], arg[2:]
if d := strings.TrimPrefix(origin, m.Cap("domain")); len(d) > 0 && d[0] == '.' {
domain = d[1:]
} else if d == "" {
domain = d
} else {
domain = origin
}
if domain == "" {
if domain == "" { //本地执行
msg := m.Spawn().Cmd(arg)
m.Copy(msg, "result").Copy(msg, "append")
return
}
} else {
if m.Has("send_code") {
if m.Has("send_code") { //本地执行
msg := m.Spawn().Cmd(arg)
m.Copy(msg, "result").Copy(msg, "append")
} else {
} else { //对端执行
msg := m.Spawn(ssh.Message().Source())
msg.Cmd("send", arg)
m.Copy(msg, "result").Copy(msg, "append")
@ -146,98 +148,56 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
return
}
miss := true
match := false
host := strings.SplitN(domain, ".", 2)
m.Travel(func(m *ctx.Message, i int) bool {
if i == 0 {
return true
}
if m.Cap("hostname") == host[0] {
if len(host) > 1 {
if m.Cap("hostname") == host[0] || "*" == host[0] {
ssh, ok := m.Target().Server.(*SSH)
m.Assert(ok)
msg := m.Spawn(ssh.Message().Source())
if len(host) > 1 {
msg.Cmd("send", "domain", host[1], arg)
m.Copy(msg, "result").Copy(msg, "append")
} else {
msg := m.Spawn()
msg.Cmd("send", arg)
m.Copy(msg, "result").Copy(msg, "append")
}
m.Copy(msg, "result").Copy(msg, "append")
miss = false
return false
if !match {
match = !m.Appends("domain_miss")
}
return host[0] == "*"
}
return true
}, c)
if miss {
if match {
return
}
if m.Target() == c && m.Has("send_code") {
m.Appends("domain_miss", true)
return
}
if m.Cap("domain") == m.Conf("hostname") {
m.Appends("domain_miss", true)
return
}
// 向上路由
msg := m.Spawn(c.Message().Source())
msg.Cmd("send", "domain", domain, arg)
msg.Cmd("send", "domain", origin, arg)
m.Copy(msg, "result").Copy(msg, "append")
}
return
if domain != "" {
domain_miss := true
host := strings.SplitN(domain, ".", 2)
m.Travel(func(m *ctx.Message, i int) bool {
if i > 0 {
if m.Cap("hostname") == host[0] {
ssh, ok := m.Target().Server.(*SSH)
m.Assert(ok)
msg := m.Spawn(ssh.Message().Source()).Copy(m, "option")
if len(host) > 1 {
msg.Options("downflow", true)
msg.Detail("send", "domain", host[1], arg)
} else {
msg.Detail(arg)
}
if ssh.Message().Back(msg); !msg.Appends("domain_miss") {
m.Copy(msg, "result").Copy(msg, "append")
domain_miss = false
return false
}
}
return false
}
return true
}, c)
if domain_miss && !m.Options("downflow") && m.Cap("domain") != m.Conf("domain") {
ssh, ok := c.Server.(*SSH)
m.Assert(ok)
msg := m.Spawn(ssh.Message().Source()).Copy(m, "option")
msg.Detail("send", "domain", domain, arg)
if ssh.Message().Back(msg); !msg.Appends("domain_miss") {
m.Copy(msg, "result").Copy(msg, "append")
domain_miss = false
}
}
m.Appends("domain_miss", domain_miss)
return
}
if m.Options("send_code") || m.Cap("status") != "start" {
msg := m.Spawn().Cmd(arg)
m.Copy(msg, "result").Copy(msg, "append")
} else {
msg := m.Spawn(ssh.Message().Source())
msg.Copy(m, "option").Detail(arg)
ssh.Message().Back(msg)
m.Copy(msg, "result").Copy(msg, "append")
}
return
}
}},
"pwd": &ctx.Command{Name: "pwd", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
if len(arg) > 0 {
if len(arg) == 0 {
m.Echo(m.Cap("domain"))
return
}
if m.Options("send_code") {
if m.Target() == c {
msg := m.Spawn().Cmd("send", "pwd", m.Confx("hostname", arg, 0))
@ -265,10 +225,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
m.Cap("domain", msg.Result(1))
} else {
m.Spawn().Cmd("send", "pwd", arg[0])
return
}
}
m.Echo(m.Cap("domain"))
}},
"hello": &ctx.Command{Name: "hello request", Help: "加密请求", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {