Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "flag"
  5. "fmt"
  6. "golang.org/x/crypto/ssh"
  7. "io/ioutil"
  8. "log"
  9. "os"
  10. "path"
  11. "time"
  12.  
  13. "github.com/skorobogatov/input"
  14. "setiLabs/config"
  15. )
  16.  
  17. var (
  18. pk = flag.String("key", defaultKeyPath(), "Private key file")
  19. user = flag.String("user", config.GetSshLogin(), "User name")
  20. password = flag.String("pwd", config.GetSshPassword(), "Password")
  21. //host = flag.String("host", "185.20.227.83", "Host")
  22. //port = flag.String("port", "22", "Port")
  23. )
  24.  
  25. func main() {
  26. flag.Parse()
  27. key, err := ioutil.ReadFile(*pk) // получение приватного ключа для авторизации на ssh
  28. if err != nil {
  29. log.Panic(err)
  30. }
  31.  
  32. signer, err := ssh.ParsePrivateKey(key) // проверка ключа
  33. if err != nil {
  34. log.Panic(err)
  35. }
  36. config := &ssh.ClientConfig{
  37. Config: ssh.Config{},
  38. User: *user,
  39. Auth: []ssh.AuthMethod{
  40. ssh.PublicKeys(signer),
  41. ssh.Password(*password),
  42. },
  43. HostKeyCallback: ssh.InsecureIgnoreHostKey(),
  44. BannerCallback: nil,
  45. ClientVersion: "",
  46. HostKeyAlgorithms: nil,
  47. Timeout: 0,
  48. }
  49. fmt.Println(signer)
  50.  
  51. hosts := os.Args[1:]
  52.  
  53. var cmd string
  54.  
  55. result := make(chan string, 10)
  56. cmd = input.Gets()
  57. for _, host := range hosts {
  58. client, err := ssh.Dial("tcp", host, config)
  59. if err != nil {
  60. log.Panic(err)
  61. }
  62. go func(host string) {
  63. //defer client.Close()
  64. //execute(cmd, host, config)
  65. result <- fmt.Sprintf("%s ::\n%s::\n", host, execute(cmd, host, client))
  66. }(host)
  67. }
  68.  
  69. for range hosts {
  70. select {
  71. case res := <-result:
  72. fmt.Println(res)
  73. case <-time.After(time.Second * 20):
  74. fmt.Println("Timed out")
  75. }
  76. }
  77. }
  78.  
  79. func execute(cmd, addr string, client *ssh.Client) string {
  80. defer client.Close()
  81. session, err := client.NewSession()
  82. if err != nil {
  83. log.Panic(err)
  84. }
  85. defer session.Close()
  86. b, err := session.Output(cmd)
  87. if err != nil {
  88. return err.Error()
  89. }
  90. if string(b) == "" {
  91. return fmt.Sprintf("\"%s\": success", cmd)
  92. }
  93. return string(b)
  94. }
  95.  
  96. func defaultKeyPath() string {
  97. home := os.Getenv("HOME")
  98. if len(home) > 0 {
  99. return path.Join(home, ".ssh/id_rsa")
  100. }
  101. return ""
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement