main.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "os/user"
  6. "regexp"
  7. "strings"
  8. "git.wecise.com/wecise/common/logger"
  9. )
  10. func init() {
  11. logger.SetConsole(true)
  12. logger.SetLevel(logger.INFO)
  13. }
  14. func uch() (u, c, h string, o bool) {
  15. if len(os.Args) < 2 {
  16. return
  17. }
  18. if regexp.MustCompile(`p=.+`).MatchString(os.Args[1]) {
  19. user, e := user.Current()
  20. if e != nil {
  21. logger.Error(e)
  22. return
  23. }
  24. u = user.Username
  25. c = os.Args[1][2:]
  26. h = "127.0.0.1"
  27. o = true
  28. return
  29. }
  30. uch := strings.SplitN(os.Args[1], ":", 2)
  31. if len(uch) < 2 {
  32. return
  33. }
  34. n := strings.LastIndex(uch[1], "@")
  35. if n < 0 {
  36. return
  37. }
  38. return uch[0], uch[1][:n], uch[1][n+1:], true
  39. }
  40. func main() {
  41. u, c, h, o := uch()
  42. if !o {
  43. fmt.Println("usage:")
  44. fmt.Println(" msh [user:code@host]|[p=password] [[c=]command [p=password] [[r=regexp] [o=output]]...]...")
  45. return
  46. }
  47. cmds := []*Command{{Cmd: "", Password: c, Regexp: []*Regexp{{Regexp: nil, Output: ""}}}}
  48. for i := 2; i < len(os.Args); i++ {
  49. arg := os.Args[i]
  50. kv := strings.SplitN(arg, "=", 2)
  51. var cmd string
  52. switch kv[0] {
  53. case "cmd", "command", "c":
  54. cmd = kv[1]
  55. case "password", "code", "pass", "p":
  56. cmds[len(cmds)-1].Password = kv[1]
  57. continue
  58. case "re", "r", "regex":
  59. re, err := regexp.Compile(kv[1])
  60. if err != nil {
  61. logger.Error(err)
  62. } else {
  63. cmds[len(cmds)-1].Regexp = append(cmds[len(cmds)-1].Regexp, &Regexp{Regexp: re})
  64. }
  65. continue
  66. case "out", "o", "output":
  67. cmds[len(cmds)-1].Regexp[len(cmds[len(cmds)-1].Regexp)-1].Output = kv[1]
  68. continue
  69. default:
  70. cmd = arg
  71. }
  72. cmds = append(cmds, &Command{Cmd: cmd, Password: c, Regexp: []*Regexp{{Regexp: nil, Output: ""}}})
  73. }
  74. node := &Node{
  75. Name: "x",
  76. Alias: "x",
  77. Host: h,
  78. User: u,
  79. Port: 22,
  80. KeyPath: "",
  81. Passphrase: "",
  82. Password: c,
  83. Commands: cmds,
  84. Children: []*Node{},
  85. Jump: []*Node{},
  86. }
  87. sshc := NewClient(node)
  88. sshc.Login()
  89. }