ssh.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package cluster
  2. import (
  3. "bytes"
  4. "fmt"
  5. "log"
  6. "mfw/util"
  7. "net"
  8. "golang.org/x/crypto/ssh"
  9. )
  10. func ssHConnect(user, password, host string, port int) (*ssh.Session, error) {
  11. util.Catch()
  12. var (
  13. auth []ssh.AuthMethod
  14. addr string
  15. clientConfig *ssh.ClientConfig
  16. client *ssh.Client
  17. session *ssh.Session
  18. err error
  19. )
  20. // get auth method
  21. auth = make([]ssh.AuthMethod, 0)
  22. auth = append(auth, ssh.Password(password))
  23. hostKeyCallbk := func(hostname string, remote net.Addr, key ssh.PublicKey) error {
  24. return nil
  25. }
  26. clientConfig = &ssh.ClientConfig{
  27. User: user,
  28. Auth: auth,
  29. // Timeout: 30 * time.Second,
  30. HostKeyCallback: hostKeyCallbk,
  31. }
  32. // connet to ssh
  33. addr = fmt.Sprintf("%s:%d", host, port)
  34. if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
  35. return nil, err
  36. }
  37. // create session
  38. if session, err = client.NewSession(); err != nil {
  39. return nil, err
  40. }
  41. return session, nil
  42. }
  43. /*
  44. #!/bin/bash
  45. kill -9 $(pidof extract_v3)
  46. rm -rf extract_v3*
  47. mkdir extract_v3
  48. cd /opt/extract_v3
  49. wget http://10.171.112.160:9090/res/extract_v3.tgz
  50. tar -xzvf extract_v3.tgz
  51. chmod 777 extract_v3
  52. nohup ./extract_v3 >/opt/extract_v3/nohup 2>&1 &
  53. exit
  54. */
  55. func RunSsh(ip string) bool {
  56. util.Catch()
  57. var b bool
  58. var stdOut, stdErr bytes.Buffer
  59. session, err := ssHConnect("root", Password, ip, 22)
  60. if err != nil {
  61. log.Println(err)
  62. return b
  63. }
  64. defer session.Close()
  65. session.Stdout = &stdOut
  66. session.Stderr = &stdErr
  67. var sshstr = `
  68. #!/bin/bash
  69. kill -9 $(pidof udp2019)
  70. yum install -y docker docker-compose unzip
  71. systemctl start docker
  72. docker pull registry-vpc.cn-beijing.aliyuncs.com/file2text/github_ocr:tleyden5iwx_open-ocr-preprocessor
  73. docker tag 00a689ddd4f8 tleyden5iwx/open-ocr-preprocessor:latest
  74. docker rmi registry-vpc.cn-beijing.aliyuncs.com/file2text/github_ocr:tleyden5iwx_open-ocr-preprocessor
  75. docker pull registry-vpc.cn-beijing.aliyuncs.com/file2text/github_ocr:rabbitmq
  76. docker tag 5335b737c380 rabbitmq:3.6.5-management
  77. docker rmi registry-vpc.cn-beijing.aliyuncs.com/file2text/github_ocr:rabbitmq
  78. docker pull registry-vpc.cn-beijing.aliyuncs.com/file2text/github_ocr:tleyden5iwx_open-ocr-2
  79. docker tag c99e1ea480 tleyden5iwx/open-ocr-2:latest
  80. docker rmi registry-vpc.cn-beijing.aliyuncs.com/file2text/github_ocr:tleyden5iwx_open-ocr-2
  81. cd /home/
  82. wget http://10.171.112.160:10100/res/auto.zip
  83. unzip auto.zip
  84. wget http://10.171.112.160:10100/res/open-ocr.tar
  85. tar -xvf open-ocr.tar
  86. chmod 777 /home/f2text/file2text
  87. chmod 777 /home/udp/udp2019
  88. cd /home/open-ocr/docker-compose/
  89. export OPEN_OCR_INSTANCE=open-ocr-2
  90. export RABBITMQ_HOST=` + ip + `
  91. docker-compose up -d
  92. docker pull registry-vpc.cn-beijing.aliyuncs.com/file2text/gocv:v2-binbash
  93. docker run --name f2text -itd -v /home/:/home/ --net host registry-vpc.cn-beijing.aliyuncs.com/file2text/gocv:v2-binbash /bin/bash
  94. docker exec f2text /etc/profile.d/auto.sh
  95. cd /home/udp/
  96. sed -i "s/127.0.0.1/` + ip + `/g" /home/udp/config.json
  97. nohup ./udp2019 >/home/udp/log.out 2>&1 &
  98. `
  99. log.Println("连接到ip:", ip,"成功")
  100. if err := session.Run(sshstr); err == nil {
  101. b = true
  102. log.Println(ip, "ssh over ok")
  103. } else {
  104. log.Println(err)
  105. }
  106. return b
  107. }
  108. func SshPgrep(ip, cmd string) (bool, string ){
  109. var bStdout bytes.Buffer
  110. session, err := ssHConnect("root", Password, ip, 22)
  111. defer session.Close()
  112. var b bool
  113. if err != nil {
  114. log.Println(err)
  115. return b,cmd+" ssh err"+err.Error()
  116. }
  117. session.Stdout = &bStdout
  118. var tmpstr string
  119. if err := session.Run(cmd); err == nil {
  120. b = true
  121. if len(bStdout.String()) == 0 {
  122. b = false
  123. }
  124. log.Println(ip, cmd, "pid:", bStdout.String())
  125. tmpstr = fmt.Sprintf(" %s %s %s %s",ip, cmd, "pid:", bStdout.String())
  126. } else {
  127. log.Println(ip, cmd, "err", err)
  128. tmpstr = fmt.Sprintf(" %s %s %s %s",ip, cmd, "err:", err.Error())
  129. }
  130. return b,tmpstr
  131. }