mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-26 09:14:06 +08:00
add ssh.login
This commit is contained in:
parent
04be739f22
commit
8cac01d75f
@ -4,5 +4,5 @@ var version = struct {
|
|||||||
host string
|
host string
|
||||||
self int
|
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.Optionv("bio.msg", msg)
|
||||||
|
|
||||||
m.Log("fuck", "what %v", arg)
|
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
ms := []*Message{msg.message, msg}
|
ms := []*Message{msg.message, msg}
|
||||||
for i := 0; i < len(ms); i++ {
|
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("time", ms[i].Time())
|
||||||
m.Push("source", ms[i].source.Name)
|
m.Push("source", ms[i].source.Name)
|
||||||
m.Push("target", ms[i].target.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 {
|
if i > 0 {
|
||||||
ms = append(ms, ms[i].messages...)
|
ms = append(ms, ms[i].messages...)
|
||||||
}
|
}
|
||||||
|
@ -485,6 +485,9 @@ func (m *Message) Cmd(args ...interface{}) *Message {
|
|||||||
m.Set("detail", kit.Trans(args...))
|
m.Set("detail", kit.Trans(args...))
|
||||||
}
|
}
|
||||||
key, arg := m.Meta["detail"][0], m.Meta["detail"][1:]
|
key, arg := m.Meta["detail"][0], m.Meta["detail"][1:]
|
||||||
|
if key == "_" {
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
msg := m
|
msg := m
|
||||||
if strings.Contains(key, ":") {
|
if strings.Contains(key, ":") {
|
||||||
@ -513,10 +516,6 @@ func (m *Message) Cmd(args ...interface{}) *Message {
|
|||||||
}
|
}
|
||||||
return msg.Hand
|
return msg.Hand
|
||||||
})
|
})
|
||||||
|
|
||||||
if !msg.Hand {
|
|
||||||
// msg.Log("error", "cmd run error %s", msg.Format())
|
|
||||||
}
|
|
||||||
return msg
|
return msg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
package ssh
|
package ssh
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"contexts/ctx"
|
"contexts/ctx"
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
"time"
|
||||||
"toolkit"
|
"toolkit"
|
||||||
|
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
@ -12,6 +16,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type SSH struct {
|
type SSH struct {
|
||||||
|
relay chan *ctx.Message
|
||||||
*ctx.Context
|
*ctx.Context
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +27,49 @@ func (ssh *SSH) Begin(m *ctx.Message, arg ...string) ctx.Server {
|
|||||||
return ssh
|
return ssh
|
||||||
}
|
}
|
||||||
func (ssh *SSH) Start(m *ctx.Message, arg ...string) bool {
|
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 {
|
func (ssh *SSH) Close(m *ctx.Message, arg ...string) bool {
|
||||||
return false
|
return false
|
||||||
@ -127,6 +174,11 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
"trust": &ctx.Config{Name: "trust", Value: map[string]interface{}{
|
"trust": &ctx.Config{Name: "trust", Value: map[string]interface{}{
|
||||||
"renew": true, "fresh": false, "user": true, "up": true,
|
"renew": true, "fresh": false, "user": true, "up": true,
|
||||||
}, Help: "可信节点"},
|
}, Help: "可信节点"},
|
||||||
|
"login": &ctx.Config{Name: "login", Value: map[string]interface{}{
|
||||||
|
"ticker": "10ms",
|
||||||
|
"count": 100,
|
||||||
|
"delay": "10ms",
|
||||||
|
}, Help: "聊天群组"},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ctx.Command{
|
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) {
|
"_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"))
|
m.Log("time", "exec: %v", m.Format("cost"))
|
||||||
return
|
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
|
return
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user