Advertisement
Guest User

Untitled

a guest
Jan 28th, 2017
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. //"bufio"
  5. "flag"
  6. "fmt"
  7. "io"
  8. "io/ioutil"
  9. "net"
  10. //"os"
  11.  
  12. "github.com/dutchcoders/sshproxy"
  13. "golang.org/x/crypto/ssh"
  14. )
  15.  
  16. func main() {
  17. listen := flag.String("listen", ":8022", "listen address")
  18. dest := flag.String("dest", ":22", "destination address")
  19. key := flag.String("key", "conf/id_rsa", "rsa key to use")
  20. flag.Parse()
  21.  
  22. privateBytes, err := ioutil.ReadFile(*key)
  23. if err != nil {
  24. panic("Failed to load private key")
  25. }
  26.  
  27. private, err := ssh.ParsePrivateKey(privateBytes)
  28. if err != nil {
  29. panic("Failed to parse private key")
  30. }
  31.  
  32. var sessions map[net.Addr]map[string]interface{} = make(map[net.Addr]map[string]interface{})
  33.  
  34. config := &ssh.ServerConfig{
  35. PasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) {
  36. fmt.Printf("Login attempt: %s, user %s password: %s", c.RemoteAddr(), c.User(), string(pass))
  37.  
  38. sessions[c.RemoteAddr()] = map[string]interface{}{
  39. "username": c.User(),
  40. "password": string(pass),
  41. }
  42.  
  43. clientConfig := &ssh.ClientConfig{}
  44.  
  45. clientConfig.User = c.User()
  46. clientConfig.Auth = []ssh.AuthMethod{
  47. ssh.Password(string(pass)),
  48. }
  49.  
  50. client, err := ssh.Dial("tcp", *dest, clientConfig)
  51.  
  52. sessions[c.RemoteAddr()]["client"] = client
  53. return nil, err
  54. },
  55. }
  56.  
  57. config.AddHostKey(private)
  58.  
  59. sshproxy.ListenAndServe(*listen, config, func(c ssh.ConnMetadata) (*ssh.Client, error) {
  60. meta, _ := sessions[c.RemoteAddr()]
  61.  
  62. fmt.Println(meta)
  63.  
  64. client := meta["client"].(*ssh.Client)
  65. fmt.Printf("Connection accepted from: %s", c.RemoteAddr())
  66.  
  67. return client, err
  68. }, func(c ssh.ConnMetadata, r io.ReadCloser) (io.ReadCloser, error) {
  69. reader := sshproxy.NewTypeWriterReadCloser(r)
  70.  
  71. scanner := bufio.NewScanner(reader)
  72. go func() {
  73. for scanner.Scan() {
  74. fmt.Printf("%s \n", scanner.Text())
  75. }
  76. if err := scanner.Err(); err != nil {
  77. fmt.Fprintln(os.Stderr, "There was an error with the scanner in attached container", err)
  78. }
  79. }()
  80.  
  81. return reader, nil
  82. }, func(c ssh.ConnMetadata) error {
  83. fmt.Println("Connection closed.")
  84. return nil
  85. })
  86.  
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement