Init
This commit is contained in:
parent
54748dea17
commit
cc97b844c0
23
Forward.go
Normal file
23
Forward.go
Normal file
@ -0,0 +1,23 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"golang.org/x/crypto/ssh"
|
||||
"log"
|
||||
"net"
|
||||
)
|
||||
|
||||
func forward(localConn net.Conn, config *ssh.ClientConfig) {
|
||||
|
||||
sshClientConn, err := ssh.Dial("tcp", serverAddrString, config)
|
||||
if err != nil {
|
||||
log.Printf("ssh.Dial failed: %s\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
if sshConn, err := sshClientConn.Dial("tcp", remoteAddrString); err != nil {
|
||||
log.Println(`Was not able to create the tunnel: ` + err.Error())
|
||||
} else {
|
||||
go transfer(localConn, sshConn)
|
||||
go transfer(sshConn, localConn)
|
||||
}
|
||||
}
|
25
KeyboardInteractiveChallenge.go
Normal file
25
KeyboardInteractiveChallenge.go
Normal file
@ -0,0 +1,25 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
)
|
||||
|
||||
func keyboardInteractiveChallenge(user, instruction string, questions []string, echos []bool) (answers []string, err error) {
|
||||
|
||||
log.Println(`User: ` + user)
|
||||
log.Println(`Instruction: ` + instruction)
|
||||
log.Println(`Questions:`)
|
||||
for q := range questions {
|
||||
log.Println(q)
|
||||
}
|
||||
|
||||
countQuestions := len(questions)
|
||||
answers = make([]string, countQuestions, countQuestions)
|
||||
|
||||
if countQuestions > 0 {
|
||||
answers[0] = password
|
||||
}
|
||||
|
||||
err = nil
|
||||
return
|
||||
}
|
37
Main.go
Normal file
37
Main.go
Normal file
@ -0,0 +1,37 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"golang.org/x/crypto/ssh"
|
||||
"log"
|
||||
"net"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
readFlags()
|
||||
config := &ssh.ClientConfig{
|
||||
User: username,
|
||||
Auth: []ssh.AuthMethod{
|
||||
ssh.Password(password),
|
||||
ssh.PasswordCallback(passwordCallback),
|
||||
ssh.KeyboardInteractive(keyboardInteractiveChallenge),
|
||||
},
|
||||
}
|
||||
|
||||
localListener, err := net.Listen(`tcp`, localAddrString)
|
||||
if err != nil {
|
||||
log.Printf("net.Listen failed: %v\n", err)
|
||||
} else {
|
||||
log.Println(`Listen to local address.`)
|
||||
}
|
||||
|
||||
for {
|
||||
localConn, err := localListener.Accept()
|
||||
if err != nil {
|
||||
log.Printf("listen.Accept failed: %v\n", err)
|
||||
} else {
|
||||
log.Println(`Accepted a client.`)
|
||||
go forward(localConn, config)
|
||||
}
|
||||
}
|
||||
}
|
5
PasswordCallback.go
Normal file
5
PasswordCallback.go
Normal file
@ -0,0 +1,5 @@
|
||||
package main
|
||||
|
||||
func passwordCallback() (string, error) {
|
||||
return password, nil
|
||||
}
|
14
ReadFlags.go
Normal file
14
ReadFlags.go
Normal file
@ -0,0 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
)
|
||||
|
||||
func readFlags() {
|
||||
flag.StringVar(&serverAddrString, `server`, `127.0.0.1:22`, `The (remote) SSH server, e.g. 'my.host.com', 'my.host.com:22', '127.0.0.1:22', 'localhost:22'.`)
|
||||
flag.StringVar(&localAddrString, `local`, `127.0.0.1:50000`, `The local end-point of the tunnel, e.g. '127.0.0.1:50000', 'localhost:50000'.`)
|
||||
flag.StringVar(&remoteAddrString, `remote`, `127.0.0.1:27017`, `The remote side end-point (e.g. on the machine with the SSH server), e.g. a MongoDB (port 27017) '127.0.0.1:27017', a web server '127.0.0.1:80'`)
|
||||
flag.StringVar(&username, `user`, `username`, `The user's name for the SSD server.`)
|
||||
flag.StringVar(&password, `pwd`, `password`, `The user's password for the SSD server.`)
|
||||
flag.Parse()
|
||||
}
|
15
Transfer.go
Normal file
15
Transfer.go
Normal file
@ -0,0 +1,15 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
"log"
|
||||
)
|
||||
|
||||
func transfer(fromReader io.Reader, toWriter io.Writer) {
|
||||
|
||||
if _, err := io.Copy(toWriter, fromReader); err != nil {
|
||||
log.Printf("io.Copy failed: %v\n", err)
|
||||
} else {
|
||||
log.Println(`Transfer closed.`)
|
||||
}
|
||||
}
|
9
Variables.go
Normal file
9
Variables.go
Normal file
@ -0,0 +1,9 @@
|
||||
package main
|
||||
|
||||
var (
|
||||
username = "name"
|
||||
password = "pwd"
|
||||
serverAddrString = "server:22"
|
||||
localAddrString = "localhost:53001"
|
||||
remoteAddrString = "localhost:27017"
|
||||
)
|
Loading…
Reference in New Issue
Block a user