mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-25 16:58:06 +08:00
add ssh.login
This commit is contained in:
parent
04be739f22
commit
8cac01d75f
@ -4,5 +4,5 @@ var version = struct {
|
||||
host string
|
||||
self int
|
||||
}{
|
||||
"2019-08-22 17:02:38", "ZYB-20190522USI", 415,
|
||||
"2019-08-23 14:51:01", "ZYB-20190522USI", 443,
|
||||
}
|
||||
|
@ -743,7 +743,6 @@ var Index = &Context{Name: "ctx", Help: "模块中心", Server: &CTX{},
|
||||
}
|
||||
m.Optionv("bio.msg", msg)
|
||||
|
||||
m.Log("fuck", "what %v", arg)
|
||||
if len(arg) == 0 {
|
||||
ms := []*Message{msg.message, msg}
|
||||
for i := 0; i < len(ms); i++ {
|
||||
@ -759,7 +758,7 @@ var Index = &Context{Name: "ctx", Help: "模块中心", Server: &CTX{},
|
||||
m.Push("time", ms[i].Time())
|
||||
m.Push("source", ms[i].source.Name)
|
||||
m.Push("target", ms[i].target.Name)
|
||||
m.Push("detail", kit.Format(ms[i].Meta["detail"]))
|
||||
m.Push("details", kit.Format(ms[i].Meta["detail"]))
|
||||
if i > 0 {
|
||||
ms = append(ms, ms[i].messages...)
|
||||
}
|
||||
|
@ -485,6 +485,9 @@ func (m *Message) Cmd(args ...interface{}) *Message {
|
||||
m.Set("detail", kit.Trans(args...))
|
||||
}
|
||||
key, arg := m.Meta["detail"][0], m.Meta["detail"][1:]
|
||||
if key == "_" {
|
||||
return m
|
||||
}
|
||||
|
||||
msg := m
|
||||
if strings.Contains(key, ":") {
|
||||
@ -513,10 +516,6 @@ func (m *Message) Cmd(args ...interface{}) *Message {
|
||||
}
|
||||
return msg.Hand
|
||||
})
|
||||
|
||||
if !msg.Hand {
|
||||
// msg.Log("error", "cmd run error %s", msg.Format())
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,11 @@
|
||||
package ssh
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"contexts/ctx"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"time"
|
||||
"toolkit"
|
||||
|
||||
"encoding/hex"
|
||||
@ -12,6 +16,7 @@ import (
|
||||
)
|
||||
|
||||
type SSH struct {
|
||||
relay chan *ctx.Message
|
||||
*ctx.Context
|
||||
}
|
||||
|
||||
@ -22,7 +27,49 @@ func (ssh *SSH) Begin(m *ctx.Message, arg ...string) ctx.Server {
|
||||
return ssh
|
||||
}
|
||||
func (ssh *SSH) Start(m *ctx.Message, arg ...string) bool {
|
||||
return true
|
||||
ir, iw := io.Pipe()
|
||||
or, ow := io.Pipe()
|
||||
er, ew := io.Pipe()
|
||||
cmd := exec.Command("ssh", arg[0])
|
||||
cmd.Stdin, cmd.Stdout, cmd.Stderr = ir, ow, ew
|
||||
cmd.Start()
|
||||
|
||||
relay := m
|
||||
done := false
|
||||
ssh.relay = make(chan *ctx.Message, 10)
|
||||
m.Gos(m.Spawn(), func(msg *ctx.Message) {
|
||||
for relay = range ssh.relay {
|
||||
done = false
|
||||
for _, v := range relay.Meta["detail"][1:] {
|
||||
msg.Log("info", "%v", v)
|
||||
fmt.Fprint(iw, v, " ")
|
||||
}
|
||||
fmt.Fprintln(iw)
|
||||
|
||||
ticker, delay := kit.Duration(msg.Conf("ssh.login", "ticker")), kit.Duration(msg.Conf("ssh.login", "ticker"))
|
||||
for i := 0; i < msg.Confi("ssh.login", "count"); i++ {
|
||||
msg.Log("done", "%d %v", i, done)
|
||||
if time.Sleep(ticker); done {
|
||||
time.Sleep(delay)
|
||||
relay.Back(relay)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
m.Gos(m.Spawn(), func(msg *ctx.Message) {
|
||||
for bio := bufio.NewScanner(er); bio.Scan(); {
|
||||
msg.Log("warn", "what %v", bio.Text())
|
||||
relay.Echo(bio.Text()).Echo("\n")
|
||||
done = true
|
||||
}
|
||||
})
|
||||
for bio := bufio.NewScanner(or); bio.Scan(); {
|
||||
m.Log("info", "what %v", bio.Text())
|
||||
relay.Echo(bio.Text()).Echo("\n")
|
||||
done = true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func (ssh *SSH) Close(m *ctx.Message, arg ...string) bool {
|
||||
return false
|
||||
@ -127,6 +174,11 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
||||
"trust": &ctx.Config{Name: "trust", Value: map[string]interface{}{
|
||||
"renew": true, "fresh": false, "user": true, "up": true,
|
||||
}, Help: "可信节点"},
|
||||
"login": &ctx.Config{Name: "login", Value: map[string]interface{}{
|
||||
"ticker": "10ms",
|
||||
"count": 100,
|
||||
"delay": "10ms",
|
||||
}, Help: "聊天群组"},
|
||||
},
|
||||
Commands: map[string]*ctx.Command{
|
||||
"_init": &ctx.Command{Name: "_init", Help: "启动初始化", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
@ -959,7 +1011,22 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
||||
m.Log("time", "exec: %v", m.Format("cost"))
|
||||
return
|
||||
}},
|
||||
"relay": &ctx.Command{Name: "relay address", Help: "网络连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
|
||||
"login": &ctx.Command{Name: "login address", Help: "网络连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
if len(arg) == 0 {
|
||||
arg = append(arg, "shy@shylinux.com")
|
||||
}
|
||||
m.Start(arg[0], arg[0], arg...)
|
||||
time.Sleep(1000 * time.Millisecond)
|
||||
return
|
||||
}},
|
||||
"run": {Name: "run cmd", Help: "网络连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||
if ssh, ok := m.Target().Server.(*SSH); ok && ssh.relay != nil {
|
||||
ssh.relay <- m
|
||||
m.CallBack(true, func(msg *ctx.Message) (res *ctx.Message) {
|
||||
return nil
|
||||
}, append([]string{"_"}, arg...))
|
||||
}
|
||||
return
|
||||
}},
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user