Guest User

Untitled

a guest
Jan 12th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. // Go in action
  2. // @jeffotoni
  3. // 2019-01-11
  4.  
  5. package main
  6.  
  7. import (
  8. "fmt"
  9. "log"
  10. "os"
  11.  
  12. "golang.org/x/crypto/ssh"
  13. )
  14.  
  15. var KEY_PEM = `-----BEGIN RSA PRIVATE KEY-----
  16.  
  17. -----END RSA PRIVATE KEY-----`
  18.  
  19. func PublicKeyFile() ssh.AuthMethod {
  20. buffer := []byte(KEY_PEM)
  21. key, err := ssh.ParsePrivateKey(buffer)
  22. if err != nil {
  23. return nil
  24. }
  25. return ssh.PublicKeys(key)
  26. }
  27.  
  28. func main() {
  29.  
  30. hostname := "server.com"
  31. port := "22"
  32. username := "centos"
  33. //password := ""
  34.  
  35. // SSH client config
  36. config := &ssh.ClientConfig{
  37. User: username,
  38. Auth: []ssh.AuthMethod{
  39. //ssh.Password(password),
  40. PublicKeyFile(),
  41. },
  42. HostKeyCallback: ssh.InsecureIgnoreHostKey(),
  43. }
  44.  
  45. // Connect to host
  46. client, err := ssh.Dial("tcp", hostname+":"+port, config)
  47. if err != nil {
  48. log.Fatal(err)
  49. }
  50. defer client.Close()
  51.  
  52. // Create sesssion
  53. sess, err := client.NewSession()
  54. if err != nil {
  55. log.Fatal("Failed to create session: ", err)
  56. }
  57. defer sess.Close()
  58.  
  59. // StdinPipe for commands
  60. stdin, err := sess.StdinPipe()
  61. if err != nil {
  62. log.Fatal(err)
  63. }
  64.  
  65. // stdoutIn, err := sess.StdoutPipe()
  66. // if err != nil {
  67. // log.Fatal(err)
  68. // }
  69.  
  70. // Uncomment to store output in variable
  71. //var b bytes.Buffer
  72. //sess.Stdout = &b
  73. //sess.Stderr = &b
  74.  
  75. // Enable system stdout
  76. // Comment these if you uncomment to store in variable
  77. sess.Stdout = os.Stdout
  78. sess.Stderr = os.Stderr
  79.  
  80. // Start remote shell
  81. err = sess.Shell()
  82. if err != nil {
  83. log.Fatal(err)
  84. }
  85.  
  86. // send the commands
  87. commands := []string{
  88. "echo '################ executando ###############'",
  89. // "", //coloca aqui os comandos
  90. "exit",
  91. }
  92.  
  93. for _, cmd := range commands {
  94. _, _ = fmt.Fprintf(stdin, "%s\n", cmd)
  95. }
  96.  
  97. // Wait for sess to finish
  98. err = sess.Wait()
  99. if err != nil {
  100. log.Fatal(err)
  101. }
  102.  
  103. // Uncomment to store in variable
  104. //fmt.Println(b.String())
  105. }
Add Comment
Please, Sign In to add comment