1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package main
- import (
- "fmt"
- "os"
- "os/user"
- "regexp"
- "strings"
- "git.wecise.com/wecise/common/logger"
- )
- func init() {
- logger.SetConsole(true)
- logger.SetLevel(logger.INFO)
- }
- func uch() (u, c, h string, o bool) {
- if len(os.Args) < 2 {
- return
- }
- if regexp.MustCompile(`p=.+`).MatchString(os.Args[1]) {
- user, e := user.Current()
- if e != nil {
- logger.Error(e)
- return
- }
- u = user.Username
- c = os.Args[1][2:]
- h = "127.0.0.1"
- o = true
- return
- }
- uch := strings.SplitN(os.Args[1], ":", 2)
- if len(uch) < 2 {
- return
- }
- n := strings.LastIndex(uch[1], "@")
- if n < 0 {
- return
- }
- return uch[0], uch[1][:n], uch[1][n+1:], true
- }
- func main() {
- u, c, h, o := uch()
- if !o {
- fmt.Println("usage:")
- fmt.Println(" msh [user:code@host]|[p=password] [[c=]command [p=password] [[r=regexp] [o=output]]...]...")
- return
- }
- cmds := []*Command{{Cmd: "", Password: c, Regexp: []*Regexp{{Regexp: nil, Output: ""}}}}
- for i := 2; i < len(os.Args); i++ {
- arg := os.Args[i]
- kv := strings.SplitN(arg, "=", 2)
- var cmd string
- switch kv[0] {
- case "cmd", "command", "c":
- cmd = kv[1]
- case "password", "code", "pass", "p":
- cmds[len(cmds)-1].Password = kv[1]
- continue
- case "re", "r", "regex":
- re, err := regexp.Compile(kv[1])
- if err != nil {
- logger.Error(err)
- } else {
- cmds[len(cmds)-1].Regexp = append(cmds[len(cmds)-1].Regexp, &Regexp{Regexp: re})
- }
- continue
- case "out", "o", "output":
- cmds[len(cmds)-1].Regexp[len(cmds[len(cmds)-1].Regexp)-1].Output = kv[1]
- continue
- default:
- cmd = arg
- }
- cmds = append(cmds, &Command{Cmd: cmd, Password: c, Regexp: []*Regexp{{Regexp: nil, Output: ""}}})
- }
- node := &Node{
- Name: "x",
- Alias: "x",
- Host: h,
- User: u,
- Port: 22,
- KeyPath: "",
- Passphrase: "",
- Password: c,
- Commands: cmds,
- Children: []*Node{},
- Jump: []*Node{},
- }
- sshc := NewClient(node)
- sshc.Login()
- }
|