Version 1.3.0

In case the password must provided interactively, it is now invisible.
This commit is contained in:
Thorsten Sommer 2016-03-16 08:05:56 +01:00
parent a16b99af6e
commit c85e21231b

105
Main.go
View File

@ -1,48 +1,57 @@
package main package main
import ( import (
"fmt" "fmt"
"github.com/SommerEngineering/SSHTunnel/Tunnel" "github.com/SommerEngineering/SSHTunnel/Tunnel"
"golang.org/x/crypto/ssh" "github.com/howeyc/gopass"
"runtime" "golang.org/x/crypto/ssh"
) "log"
"os"
func main() { "runtime"
)
// Show the current version:
fmt.Println(`SSHTunnel v1.2.0`) func main() {
// Allow Go to use all CPUs: // Show the current version:
runtime.GOMAXPROCS(runtime.NumCPU()) log.Println(`SSHTunnel v1.3.0`)
// Read the configuration from the command-line args: // Allow Go to use all CPUs:
readFlags() runtime.GOMAXPROCS(runtime.NumCPU())
// Check if the password was provided: // Read the configuration from the command-line args:
for true { readFlags()
if password == `` {
// Promt for the password: // Check if the password was provided:
fmt.Println(`Please provide the password for the connection:`) for true {
fmt.Scanln(&password) if password == `` {
} else { // Promt for the password:
break fmt.Println(`Please provide the password for the connection:`)
} if pass, errPass := gopass.GetPasswd(); errPass != nil {
} log.Println(`There was an error reading the password securely: ` + errPass.Error())
os.Exit(1)
// Create the SSH configuration: return
Tunnel.SetPassword4Callback(password) } else {
config := &ssh.ClientConfig{ password = string(pass)
User: username, }
Auth: []ssh.AuthMethod{ } else {
ssh.Password(password), break
ssh.PasswordCallback(Tunnel.PasswordCallback), }
ssh.KeyboardInteractive(Tunnel.KeyboardInteractiveChallenge), }
},
} // Create the SSH configuration:
Tunnel.SetPassword4Callback(password)
// Create the local end-point: config := &ssh.ClientConfig{
localListener := Tunnel.CreateLocalEndPoint(localAddrString) User: username,
Auth: []ssh.AuthMethod{
// Accept client connections (will block forever): ssh.Password(password),
Tunnel.AcceptClients(localListener, config, serverAddrString, remoteAddrString) ssh.PasswordCallback(Tunnel.PasswordCallback),
} ssh.KeyboardInteractive(Tunnel.KeyboardInteractiveChallenge),
},
}
// Create the local end-point:
localListener := Tunnel.CreateLocalEndPoint(localAddrString)
// Accept client connections (will block forever):
Tunnel.AcceptClients(localListener, config, serverAddrString, remoteAddrString)
}