Guest User

Untitled

a guest
Aug 6th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "os"
  6.  
  7. "golang.org/x/crypto/ssh"
  8. "golang.org/x/crypto/ssh/terminal"
  9. )
  10.  
  11. func main() {
  12. host := "target.host.local"
  13. port := "22"
  14. user := "user"
  15. pass := "password"
  16.  
  17. // Create sshClientConfig
  18. sshConfig := &ssh.ClientConfig{
  19. User: user,
  20. Auth: []ssh.AuthMethod{
  21. ssh.Password(pass),
  22. },
  23. HostKeyCallback: ssh.InsecureIgnoreHostKey(),
  24. }
  25.  
  26. // SSH connect.
  27. client, err := ssh.Dial("tcp", host+":"+port, sshConfig)
  28.  
  29. // Create Session
  30. session, err := client.NewSession()
  31. defer session.Close()
  32.  
  33. // キー入力を接続先が認識できる形式に変換する(ここがキモ)
  34. fd := int(os.Stdin.Fd())
  35. state, err := terminal.MakeRaw(fd)
  36. if err != nil {
  37. fmt.Println(err)
  38. }
  39. defer terminal.Restore(fd, state)
  40.  
  41. // ターミナルサイズの取得
  42. w, h, err := terminal.GetSize(fd)
  43. if err != nil {
  44. fmt.Println(err)
  45. }
  46.  
  47. modes := ssh.TerminalModes{
  48. ssh.ECHO: 1,
  49. ssh.TTY_OP_ISPEED: 14400,
  50. ssh.TTY_OP_OSPEED: 14400,
  51. }
  52.  
  53. err = session.RequestPty("xterm", h, w, modes)
  54. if err != nil {
  55. fmt.Println(err)
  56. }
  57.  
  58. session.Stdout = os.Stdout
  59. session.Stderr = os.Stderr
  60. session.Stdin = os.Stdin
  61.  
  62. err = session.Shell()
  63. if err != nil {
  64. fmt.Println(err)
  65. }
  66.  
  67. err = session.Wait()
  68. if err != nil {
  69. fmt.Println(err)
  70. }
  71. }
Add Comment
Please, Sign In to add comment