added insecure flag to allow invalid certificates.
This commit is contained in:
		
							parent
							
								
									0b57a31eaa
								
							
						
					
					
						commit
						be3e6b7c4a
					
				| @ -6,6 +6,7 @@ import ( | |||||||
| 	"converge/pkg/iowrappers" | 	"converge/pkg/iowrappers" | ||||||
| 	"converge/pkg/terminal" | 	"converge/pkg/terminal" | ||||||
| 	"converge/pkg/websocketutil" | 	"converge/pkg/websocketutil" | ||||||
|  | 	"crypto/tls" | ||||||
| 	"flag" | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"github.com/gliderlabs/ssh" | 	"github.com/gliderlabs/ssh" | ||||||
| @ -15,6 +16,7 @@ import ( | |||||||
| 	"io" | 	"io" | ||||||
| 	"log" | 	"log" | ||||||
| 	"net" | 	"net" | ||||||
|  | 	"net/http" | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/exec" | 	"os/exec" | ||||||
| @ -148,6 +150,7 @@ func main() { | |||||||
| 	advanceWarningTime := flag.Duration("warning-time", 5*time.Minute, "advance warning time before sessio ends") | 	advanceWarningTime := flag.Duration("warning-time", 5*time.Minute, "advance warning time before sessio ends") | ||||||
| 	agentExpriryTime := flag.Duration("expiry-time", 10*time.Minute, "expiry time of the session") | 	agentExpriryTime := flag.Duration("expiry-time", 10*time.Minute, "expiry time of the session") | ||||||
| 	tickerInterval := flag.Duration("check-interval", 60*time.Second, "interval at which expiry is checked") | 	tickerInterval := flag.Duration("check-interval", 60*time.Second, "interval at which expiry is checked") | ||||||
|  | 	insecure := flag.Bool("insecure", false, "allow invalid certificates") | ||||||
| 
 | 
 | ||||||
| 	flag.Parse() | 	flag.Parse() | ||||||
| 	if flag.NArg() != 1 { | 	if flag.NArg() != 1 { | ||||||
| @ -158,7 +161,14 @@ func main() { | |||||||
| 
 | 
 | ||||||
| 	agent.ConfigureAgent(*advanceWarningTime, *agentExpriryTime, *tickerInterval) | 	agent.ConfigureAgent(*advanceWarningTime, *agentExpriryTime, *tickerInterval) | ||||||
| 
 | 
 | ||||||
| 	conn, _, err := websocket.DefaultDialer.Dial(wsURL, nil) | 	dialer := websocket.Dialer{ | ||||||
|  | 		Proxy:            http.ProxyFromEnvironment, | ||||||
|  | 		HandshakeTimeout: 45 * time.Second, | ||||||
|  | 	} | ||||||
|  | 	if *insecure { | ||||||
|  | 		dialer.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} | ||||||
|  | 	} | ||||||
|  | 	conn, _, err := dialer.Dial(wsURL, nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println("WebSocket connection error:", err) | 		log.Println("WebSocket connection error:", err) | ||||||
| 		return | 		return | ||||||
|  | |||||||
| @ -3,10 +3,13 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"converge/pkg/iowrappers" | 	"converge/pkg/iowrappers" | ||||||
| 	"converge/pkg/websocketutil" | 	"converge/pkg/websocketutil" | ||||||
|  | 	"crypto/tls" | ||||||
|  | 	"flag" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"github.com/gorilla/websocket" | 	"github.com/gorilla/websocket" | ||||||
| 	"log" | 	"log" | ||||||
| 	"net" | 	"net" | ||||||
|  | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
| 	"time" | 	"time" | ||||||
| ) | ) | ||||||
| @ -18,11 +21,18 @@ func closeConnection(conn net.Conn) { | |||||||
| 	_ = conn.Close() | 	_ = conn.Close() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func handleConnection(conn net.Conn, wsURL string) { | func handleConnection(conn net.Conn, wsURL string, insecure bool) { | ||||||
| 	defer closeConnection(conn) | 	defer closeConnection(conn) | ||||||
| 
 | 
 | ||||||
| 	log.Printf("Connecting to '%s'\n", wsURL) | 	log.Printf("Connecting to '%s'\n", wsURL) | ||||||
| 	_wsConn, _, err := websocket.DefaultDialer.Dial(wsURL, nil) | 	dialer := websocket.Dialer{ | ||||||
|  | 		Proxy:            http.ProxyFromEnvironment, | ||||||
|  | 		HandshakeTimeout: 45 * time.Second, | ||||||
|  | 	} | ||||||
|  | 	if insecure { | ||||||
|  | 		dialer.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} | ||||||
|  | 	} | ||||||
|  | 	_wsConn, _, err := dialer.Dial(wsURL, nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Println("WebSocket connection error:", err) | 		log.Println("WebSocket connection error:", err) | ||||||
| 		return | 		return | ||||||
| @ -36,14 +46,23 @@ func handleConnection(conn net.Conn, wsURL string) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
| 	if len(os.Args) != 3 { | 	usage := "Usage: tcptows [options] <localport> ws[s]://<host>[:port]/client/<ID>\n" + | ||||||
| 		fmt.Fprintln(os.Stderr, "Usage: tcptows <localport> ws[s]://<host>[:port]/client/<ID>") | 		"\n" + | ||||||
| 		fmt.Fprintln(os.Stderr) | 		"Here <ID> is the rendez-vous id of a continuous integratio job\n" | ||||||
| 		fmt.Fprintln(os.Stderr, "Here <ID> is the rendez-vous id of a continuous integratio job") | 	insecure := flag.Bool("insecure", false, "allow invalid certificates") | ||||||
|  | 
 | ||||||
|  | 	flag.Usage = func() { | ||||||
|  | 		fmt.Fprintln(os.Stderr, usage) | ||||||
|  | 		flag.PrintDefaults() | ||||||
|  | 	} | ||||||
|  | 	flag.Parse() | ||||||
|  | 	fmt.Println("Narg ", flag.NArg()) | ||||||
|  | 	if flag.NArg() != 2 { | ||||||
|  | 		flag.Usage() | ||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
| 	} | 	} | ||||||
| 	tcpPort := os.Args[1] | 	tcpPort := flag.Arg(0) | ||||||
| 	wsURL := os.Args[2] | 	wsURL := flag.Arg(1) | ||||||
| 
 | 
 | ||||||
| 	listener, err := net.Listen("tcp", ":"+tcpPort) | 	listener, err := net.Listen("tcp", ":"+tcpPort) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -60,6 +79,6 @@ func main() { | |||||||
| 			log.Println(err) | 			log.Println(err) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		go handleConnection(conn, wsURL) | 		go handleConnection(conn, wsURL, *insecure) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,61 +0,0 @@ | |||||||
| package main |  | ||||||
| 
 |  | ||||||
| import ( |  | ||||||
| 	"converge/pkg/iowrappers" |  | ||||||
| 	"converge/pkg/websocketutil" |  | ||||||
| 	"fmt" |  | ||||||
| 	"github.com/gorilla/websocket" |  | ||||||
| 	"log" |  | ||||||
| 	"net" |  | ||||||
| 	"os" |  | ||||||
| 	"time" |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func closeConnection(conn net.Conn) { |  | ||||||
| 	if tcpConn, ok := conn.(*net.TCPConn); ok { |  | ||||||
| 		tcpConn.SetLinger(0) |  | ||||||
| 	} |  | ||||||
| 	_ = conn.Close() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type Stdio struct{} |  | ||||||
| 
 |  | ||||||
| func (stdio Stdio) Read(b []byte) (n int, err error) { |  | ||||||
| 	return os.Stdin.Read(b) |  | ||||||
| } |  | ||||||
| func (stdio Stdio) Write(b []byte) (n int, err error) { |  | ||||||
| 	return os.Stdout.Write(b) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func main() { |  | ||||||
| 	if len(os.Args) != 2 { |  | ||||||
| 		fmt.Fprintln(os.Stderr, "Usage: tcptows ws[s]://<host>[:port]/client/<ID>") |  | ||||||
| 		fmt.Fprintln(os.Stderr) |  | ||||||
| 		fmt.Fprintln(os.Stderr, "Here <ID> is the rendez-vous id of a continuous integratio job") |  | ||||||
| 		fmt.Fprintln(os.Stderr, "Use this in an ssh command like this; ") |  | ||||||
| 		fmt.Fprintln(os.Stderr) |  | ||||||
| 		fmt.Fprintln(os.Stderr, "  ssh -oProxyCommand='wsproxy ws[s]://<host>[:port]/client/<ID>' abc@localhost") |  | ||||||
| 		fmt.Fprintln(os.Stderr) |  | ||||||
| 		fmt.Fprintln(os.Stderr, "This lets ssh connect through wsproxy to the remote websocket on") |  | ||||||
| 		fmt.Fprintln(os.Stderr, "Converge server.") |  | ||||||
| 		fmt.Fprintln(os.Stderr) |  | ||||||
| 		os.Exit(1) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	wsURL := os.Args[1] |  | ||||||
| 
 |  | ||||||
| 	_wsConn, _, err := websocket.DefaultDialer.Dial(wsURL, nil) |  | ||||||
| 	if err != nil { |  | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
| 	_wsConn.SetReadDeadline(time.Time{}) |  | ||||||
| 	_wsConn.SetWriteDeadline(time.Time{}) |  | ||||||
| 	if err != nil { |  | ||||||
| 		log.Println("WebSocket connection error:", err) |  | ||||||
| 		panic(err) |  | ||||||
| 	} |  | ||||||
| 	wsConn := websocketutil.NewWebSocketConn(_wsConn) |  | ||||||
| 	defer wsConn.Close() |  | ||||||
| 
 |  | ||||||
| 	iowrappers.SynchronizeStreams(wsConn, Stdio{}) |  | ||||||
| } |  | ||||||
							
								
								
									
										79
									
								
								cmd/wsproxy/wsproxy.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								cmd/wsproxy/wsproxy.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,79 @@ | |||||||
|  | package main | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"converge/pkg/iowrappers" | ||||||
|  | 	"converge/pkg/websocketutil" | ||||||
|  | 	"crypto/tls" | ||||||
|  | 	"flag" | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/gorilla/websocket" | ||||||
|  | 	"log" | ||||||
|  | 	"net" | ||||||
|  | 	"net/http" | ||||||
|  | 	"os" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func closeConnection(conn net.Conn) { | ||||||
|  | 	if tcpConn, ok := conn.(*net.TCPConn); ok { | ||||||
|  | 		tcpConn.SetLinger(0) | ||||||
|  | 	} | ||||||
|  | 	_ = conn.Close() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Stdio struct{} | ||||||
|  | 
 | ||||||
|  | func (stdio Stdio) Read(b []byte) (n int, err error) { | ||||||
|  | 	return os.Stdin.Read(b) | ||||||
|  | } | ||||||
|  | func (stdio Stdio) Write(b []byte) (n int, err error) { | ||||||
|  | 	return os.Stdout.Write(b) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func main() { | ||||||
|  | 	usage := "Usage: tcptows ws[s]://<host>[:port]/client/<ID>\n\n" + | ||||||
|  | 		"\n" + | ||||||
|  | 		"Here <ID> is the rendez-vous id of a continuous integration job\n" + | ||||||
|  | 		"\n" + | ||||||
|  | 		"Use this in an ssh command like this: \n" + | ||||||
|  | 		"\n" + | ||||||
|  | 		"  ssh -oProxyCommand='wsproxy ws[s]://<host>[:port]/client/<ID>' abc@localhost\n" + | ||||||
|  | 		"\n" + | ||||||
|  | 		"This latssh connect through wsproxy tocalhost\n" | ||||||
|  | 
 | ||||||
|  | 	insecure := flag.Bool("insecure", false, "allow invalid certificates") | ||||||
|  | 
 | ||||||
|  | 	flag.Usage = func() { | ||||||
|  | 		fmt.Fprintln(os.Stderr, usage) | ||||||
|  | 		flag.PrintDefaults() | ||||||
|  | 	} | ||||||
|  | 	flag.Parse() | ||||||
|  | 	if flag.NArg() != 1 { | ||||||
|  | 		flag.Usage() | ||||||
|  | 		os.Exit(1) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	wsURL := flag.Arg(0) | ||||||
|  | 
 | ||||||
|  | 	dialer := websocket.Dialer{ | ||||||
|  | 		Proxy:            http.ProxyFromEnvironment, | ||||||
|  | 		HandshakeTimeout: 45 * time.Second, | ||||||
|  | 	} | ||||||
|  | 	if *insecure { | ||||||
|  | 		dialer.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} | ||||||
|  | 	} | ||||||
|  | 	_wsConn, _, err := dialer.Dial(wsURL, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	_wsConn.SetReadDeadline(time.Time{}) | ||||||
|  | 	_wsConn.SetWriteDeadline(time.Time{}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Println("WebSocket connection error:", err) | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	wsConn := websocketutil.NewWebSocketConn(_wsConn) | ||||||
|  | 	defer wsConn.Close() | ||||||
|  | 
 | ||||||
|  | 	iowrappers.SynchronizeStreams(wsConn, Stdio{}) | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user