Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "golang.org/x/crypto/ssh"
  7. "io"
  8. "log"
  9. "os"
  10. "sync"
  11. )
  12.  
  13. func MuxShell(w io.Writer, r io.Reader) (chan<- string, <-chan string) {
  14. in := make(chan string, 1)
  15. out := make(chan string, 1)
  16. var wg sync.WaitGroup
  17. wg.Add(1) //for the shell itself
  18. go func() {
  19. for cmd := range in {
  20. wg.Add(1)
  21. w.Write([]byte(cmd + "\n"))
  22. wg.Wait()
  23. }
  24. }()
  25. go func() {
  26. var (
  27. buf [65 * 1024]byte
  28. t int
  29. )
  30. for {
  31. n, err := r.Read(buf[t:])
  32. if err != nil {
  33. close(in)
  34. close(out)
  35. return
  36. }
  37. t += n
  38. if buf[t-2] == '$' { //assuming the $PS1 == 'sh-4.3$ '
  39. out <- string(buf[:t])
  40. wg.Done()
  41. }
  42. }
  43. }()
  44. return in, out
  45. }
  46.  
  47. func main() {
  48. config1 := &ssh.ClientConfig {
  49. User: "lab_42_2018",
  50. Auth: []ssh.AuthMethod{
  51. ssh.Password("DFfdffuy934"),
  52. },
  53. }
  54. config1.HostKeyCallback = ssh.InsecureIgnoreHostKey()
  55.  
  56. config2 := &ssh.ClientConfig{
  57. User: "lab2_42_2018",
  58. Auth: []ssh.AuthMethod{
  59. ssh.Password("DFfdffuy934"),
  60. },
  61. }
  62. config2.HostKeyCallback = ssh.InsecureIgnoreHostKey()
  63.  
  64. hosts := [2]string{"lab.posevin.com:22", "lab2.posevin.com:22"}
  65.  
  66. var(
  67. configs [2]*ssh.ClientConfig
  68. clients [2]*ssh.Client
  69. sessions [2]*ssh.Session
  70. writers [2]io.WriteCloser
  71. readers [2]io.Reader
  72. ins [2]chan<-string
  73. outs [2]<-chan string
  74. err error
  75. )
  76.  
  77. configs[0]=config1
  78. configs[1]=config2
  79.  
  80. for i:=0; i<len(hosts); i++ {
  81. clients[i], err = ssh.Dial("tcp", hosts[i], configs[i])
  82. if err != nil {
  83. panic(err)
  84. }
  85.  
  86. defer clients[i].Close()
  87. sessions[i], err = clients[i].NewSession()
  88.  
  89. if err != nil {
  90. log.Fatalf("unable to create session: %s", err)
  91. }
  92. defer sessions[i].Close()
  93.  
  94. modes := ssh.TerminalModes{
  95. ssh.ECHO: 0,
  96. }
  97.  
  98. if err := sessions[i].RequestPty("xterm", 80, 40, modes); err != nil {
  99. log.Fatal(err)
  100. }
  101.  
  102.  
  103. writers[i], err = sessions[i].StdinPipe()
  104. if err != nil {
  105. panic(err)
  106. }
  107. readers[i], err = sessions[i].StdoutPipe()
  108. if err != nil {
  109. panic(err)
  110. }
  111.  
  112. ins[i], outs[i] = MuxShell(writers[i], readers[i])
  113. if err := sessions[i].Start("/bin/sh"); err != nil {
  114. log.Fatal(err)
  115. }
  116. fmt.Print(<-outs[i]) //ignore the shell output
  117. }
  118.  
  119. for {
  120. reader := bufio.NewReader(os.Stdin)
  121. str, _ := reader.ReadString('\n')
  122.  
  123. for i:=0; i<len(hosts); i++ {
  124. fmt.Print(len(hosts))
  125. ins[i] <- str
  126. }
  127. for i:=0; i<len(hosts); i++{
  128. fmt.Print(<-outs[i])
  129. fmt.Print("------------------------------" + "\n")
  130. }
  131. }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement