/// <summary> /// Starts the ssh connection, and bridge the streams. /// </summary> private void StartTunnel() { try { _client = new SshClient(_config.host, _config.user, new PrivateKeyFile(new MemoryStream(Encoding.Default.GetBytes(PrivateKey)))); _client.Connect(); _client.KeepAliveInterval = new TimeSpan(0, 0, 5); if (!_client.IsConnected) { throw new ServiceException("Can't start tunnel, try again."); } string connectHost = string.IsNullOrEmpty(this.LocalHost) ? "127.0.0.1" : this.LocalHost; _connectionPort = _client.AddForwardedPort <ForwardedPortRemote>((uint)_config.through_port, connectHost, (uint)LocalPort); _connectionPort.Exception += new EventHandler <ExceptionEventArgs>(fw_Exception); _connectionPort.RequestReceived += new EventHandler <PortForwardEventArgs>(port_RequestReceived); _connectionPort.Start(); } catch (Exception e) { throw new ServiceException(e.Message); } }
public void Test_PortForwarding_Remote() { // ****************************************************************** // ************* Tests are still in not finished ******************** // ****************************************************************** using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD)) { client.Connect(); var port1 = new ForwardedPortRemote(8082, "www.renci.org", 80); client.AddForwardedPort(port1); port1.Exception += delegate(object sender, ExceptionEventArgs e) { Assert.Fail(e.Exception.ToString()); }; port1.Start(); var boundport = port1.BoundPort; System.Threading.Tasks.Parallel.For(0, 5, //new ParallelOptions //{ // MaxDegreeOfParallelism = 1, //}, (counter) => { var cmd = client.CreateCommand(string.Format("wget -O- http://localhost:{0}", boundport)); var result = cmd.Execute(); var end = DateTime.Now; Debug.WriteLine(string.Format("Length: {0}", result.Length)); } ); Thread.Sleep(1000 * 100); port1.Stop(); } }
public void StartTest() { uint boundPort = 0; // TODO: Initialize to an appropriate value string host = string.Empty; // TODO: Initialize to an appropriate value uint port = 0; // TODO: Initialize to an appropriate value ForwardedPortRemote target = new ForwardedPortRemote(boundPort, host, port); // TODO: Initialize to an appropriate value target.Start(); Assert.Inconclusive("A method that does not return a value cannot be verified."); }
public Tunel(string host, string user, string password, uint remotePort, uint localPort = 3389) { client = new SshClient(host, user, password); port = new ForwardedPortRemote("127.0.0.1", remotePort, "127.0.0.1", localPort); client.Connect(); client.AddForwardedPort(port); port.Start(); }
protected void Arrange() { var random = new Random(); _closingRegister = new List <EventArgs>(); _exceptionRegister = new List <ExceptionEventArgs>(); _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, 1000)); _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort)); _forwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port); _connectionInfoMock = new Mock <IConnectionInfo>(MockBehavior.Strict); _sessionMock = new Mock <ISession>(MockBehavior.Strict); _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15)); _sessionMock.Setup(p => p.IsConnected).Returns(true); _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN")); _sessionMock.Setup( p => p.SendMessage( It.Is <GlobalRequestMessage>( g => g.RequestName == GlobalRequestName.TcpIpForward && g.AddressToBind == _forwardedPort.BoundHost && g.PortToBind == _forwardedPort.BoundPort))) .Callback( () => _sessionMock.Raise(s => s.RequestSuccessReceived += null, new MessageEventArgs <RequestSuccessMessage>(new RequestSuccessMessage()))); _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny <WaitHandle>())) .Callback <WaitHandle>(handle => handle.WaitOne()); _sessionMock.Setup( p => p.SendMessage( It.Is <GlobalRequestMessage>( g => g.RequestName == GlobalRequestName.CancelTcpIpForward && g.AddressToBind == _forwardedPort.BoundHost && g.PortToBind == _forwardedPort.BoundPort))) .Callback( () => _sessionMock.Raise(s => s.RequestSuccessReceived += null, new MessageEventArgs <RequestSuccessMessage>(new RequestSuccessMessage()))); _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(false)); _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args); _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args); _forwardedPort.Session = _sessionMock.Object; _forwardedPort.Start(); _forwardedPort.Stop(); _closingRegister.Clear(); }
protected void Act() { try { _forwardedPort.Start(); Assert.Fail(); } catch (InvalidOperationException ex) { _actualException = ex; } }
protected void Act() { try { _forwardedPort.Start(); Assert.Fail(); } catch (SshConnectionException ex) { _actualException = ex; } }
protected void Act() { try { _forwardedPort.Start(); Assert.Fail(); } catch (ObjectDisposedException ex) { _actualException = ex; } }
public static void startTunnel() { var keypath = @"C:\file.ppk"; var pk = new PrivateKeyFile(keypath); var keyFiles = new[] { pk }; var client = new SshClient("domain.com", 22, "root", pk); client.KeepAliveInterval = new TimeSpan(0, 0, 30); client.ConnectionInfo.Timeout = new TimeSpan(0, 0, 20); try { client.Connect(); Console.WriteLine("[INFO] Connecté"); } catch { Console.WriteLine("[FATAL] Erreur de connexion au tunnel"); } IPAddress iplocal = IPAddress.Parse("127.0.0.1"); IPAddress ipremote = IPAddress.Parse("IP"); UInt32 portdistant1 = 7000; UInt32 portlocal1 = 5900; UInt32 portdistant2 = 7006; UInt32 portlocal2 = 4500; ForwardedPortRemote port1 = new ForwardedPortRemote(ipremote, portdistant1, iplocal, portlocal1); ForwardedPortRemote port2 = new ForwardedPortRemote(ipremote, portdistant2, iplocal, portlocal2); client.AddForwardedPort(port1); client.AddForwardedPort(port2); port1.Exception += delegate(object sender, ExceptionEventArgs e) { Console.WriteLine("[FATAL] " + e.Exception.ToString()); }; port2.Exception += delegate(object sender, ExceptionEventArgs e) { Console.WriteLine("[FATAL] " + e.Exception.ToString()); }; port1.Start(); port2.Start(); Console.WriteLine("[DEBUG] Port forwarding ok"); System.Threading.Thread.Sleep(1000 * 60 * 60 * 8); port1.Stop(); port2.Stop(); client.Disconnect(); }
private static void OpenTunnel(CommandLineOptions opts) { var client = new SshClient(opts.SshServer, opts.UserName, new PrivateKeyFile(opts.KeyFile)); client.Connect(); client.KeepAliveInterval = new TimeSpan(0, 0, 5); if (!client.IsConnected) { Log.Error("Can't start tunnel, try again."); } var connectionPort = new ForwardedPortRemote(Convert.ToUInt32(opts.RemotePort), "localhost", Convert.ToUInt32(opts.LocalPort)); client.AddForwardedPort(connectionPort); connectionPort.Start(); }
public void Start_NotAddedToClient() { const int boundPort = 80; string host = string.Empty; const uint port = 22; var target = new ForwardedPortRemote(boundPort, host, port); try { target.Start(); Assert.Fail(); } catch (InvalidOperationException ex) { Assert.IsNull(ex.InnerException); Assert.AreEqual("Forwarded port is not added to a client.", ex.Message); } }
private void connectionDelegate_DoWork(object sender, DoWorkEventArgs e) { if (!this.isConnectionRequested) { return; } try { using (SshClient client = new SshClient(this.domainName, this.user, this.privateKeyFile)) { client.Connect(); this.setIsConnected(true); if (this.isConnectionAsServerRequested) { ForwardedPortRemote port = new ForwardedPortRemote( ServerConfig.ClientHost, uint.Parse(this.port), ServerConfig.ServerHost, uint.Parse(this.port) ); client.AddForwardedPort(port); port.Start(); } else { ForwardedPortLocal port = new ForwardedPortLocal( ServerConfig.ClientHost, uint.Parse(this.port), ServerConfig.ServerHost, uint.Parse(this.port) ); client.AddForwardedPort(port); port.Start(); } while (this.isConnectionRequested) { Thread.Sleep(1000); } client.Disconnect(); this.setIsConnected(false); } } catch (Exception exception) { this.setIsConnected(false); MessageBox.Show( $"Connection severed due to error: {exception.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error ); } }
static void Main(string[] args) { Console.WriteLine("SSH Client!"); using (var client = new SshClient("52.231.201.187", "<SSH username>", "<SSH password>")) { try { client.Connect(); } catch (Exception ex2) { Console.WriteLine("SSH connection error!"); Console.WriteLine(ex2.ToString()); } // SSH Remote Port Forwarding // 1234 : SSH server side port(remote port) // 554 : local service port (ex, 80, 3389 ...) // localhost: local service hostname or ipaddress var port = new ForwardedPortRemote(1234, "127.0.0.1", 8554); client.AddForwardedPort(port); port.Exception += delegate(object sender, ExceptionEventArgs e) { Console.WriteLine(e.Exception.ToString()); }; port.RequestReceived += delegate(object sender, PortForwardEventArgs e) { Console.WriteLine(e.OriginatorHost); }; port.Start(); // ... hold the port open ... // Console.WriteLine("Press any key to close."); Console.ReadLine(); port.Stop(); client.Disconnect(); } }
public void Test_ForwardedPortRemote() { using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD)) { #region Example SshClient AddForwardedPort Start Stop ForwardedPortRemote client.Connect(); var port = new ForwardedPortRemote(8082, "www.cnn.com", 80); client.AddForwardedPort(port); port.Exception += delegate(object sender, ExceptionEventArgs e) { Console.WriteLine(e.Exception.ToString()); }; port.Start(); Thread.Sleep(1000 * 60 * 20); // Wait 20 minutes for port to be forwarded port.Stop(); #endregion } Assert.Inconclusive("TODO: Implement code to verify target"); }
protected void Arrange() { var random = new Random(); _closingRegister = new List<EventArgs>(); _exceptionRegister = new List<ExceptionEventArgs>(); _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, 1000)); _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort)); _forwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port); _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict); _sessionMock = new Mock<ISession>(MockBehavior.Strict); _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15)); _sessionMock.Setup(p => p.IsConnected).Returns(true); _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN")); _sessionMock.Setup( p => p.SendMessage( It.Is<GlobalRequestMessage>( g => g.RequestName == GlobalRequestName.TcpIpForward && g.AddressToBind == _forwardedPort.BoundHost && g.PortToBind == _forwardedPort.BoundPort))) .Callback( () => _sessionMock.Raise(s => s.RequestSuccessReceived += null, new MessageEventArgs<RequestSuccessMessage>(new RequestSuccessMessage()))); _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny<WaitHandle>())) .Callback<WaitHandle>(handle => handle.WaitOne()); _forwardedPort.Closing += (sender, args) => _closingRegister.Add(args); _forwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args); _forwardedPort.Session = _sessionMock.Object; _forwardedPort.Start(); }
public void Connect() { lock (this) { if (IsConnected) { throw new Exception("Already connected!"); IsConnected = true; } } Ssh.Connect(); Sftp.Connect(); var forwardLocal = new ForwardedPortLocal("127.0.0.1", MonoEngine.MonoDebuggerPort, "127.0.0.1", MonoEngine.MonoDebuggerPort); var forwardRemote = new ForwardedPortRemote("127.0.0.1", MonoEngine.MonoDebuggerPort, "127.0.0.1", MonoEngine.MonoDebuggerPort); Ssh.AddForwardedPort(forwardLocal); Ssh.AddForwardedPort(forwardRemote); forwardLocal.Exception += (sender, e) => { throw e.Exception; }; forwardRemote.Exception += (sender, e) => { throw e.Exception; }; forwardLocal.Start(); forwardRemote.Start(); }
public static void startTunnel() { var keypath = @""; var pk = new PrivateKeyFile(keypath); var keyFiles = new[] { pk }; var client = new SshClient("server.com", 22, "user", pk); client.KeepAliveInterval = new TimeSpan(0, 0, 30); client.ConnectionInfo.Timeout = new TimeSpan(0, 0, 20); try { client.Connect(); Console.WriteLine("Connecté à server"); } catch { Console.WriteLine("Erreur de connexion au tunnel"); } IPAddress iplocal = IPAddress.Parse("127.0.0.1"); IPAddress ipremote = IPAddress.Parse("ipserver"); UInt32 portdistant = 22; UInt32 portlocal = 25; ForwardedPortRemote port = new ForwardedPortRemote(ipremote, portdistant, iplocal, portlocal); client.AddForwardedPort(port); port.Exception += delegate(object sender, ExceptionEventArgs e) { Console.WriteLine(e.Exception.ToString()); }; port.Start(); Console.WriteLine("Port forwarding ok"); System.Threading.Thread.Sleep(1000 * 60 * 60 * 8); port.Stop(); client.Disconnect(); }
protected void Act() { _forwardedPort.Start(); }
protected void Arrange() { var random = new Random(); _closingRegister = new List<EventArgs>(); _exceptionRegister = new List<ExceptionEventArgs>(); _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort)); _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort)); _expectedElapsedTime = TimeSpan.FromMilliseconds(random.Next(100, 500)); ForwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port); _remoteChannelNumberWhileClosing = (uint) random.Next(0, 1000); _remoteWindowSizeWhileClosing = (uint) random.Next(0, int.MaxValue); _remotePacketSizeWhileClosing = (uint) random.Next(0, int.MaxValue); _remoteChannelNumberStarted = (uint)random.Next(0, 1000); _remoteWindowSizeStarted = (uint)random.Next(0, int.MaxValue); _remotePacketSizeStarted = (uint)random.Next(0, int.MaxValue); _originatorAddress = random.Next().ToString(CultureInfo.InvariantCulture); _originatorPort = (uint)random.Next(0, int.MaxValue); _connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict); _sessionMock = new Mock<ISession>(MockBehavior.Strict); _channelMock = new Mock<IChannelForwardedTcpip>(MockBehavior.Strict); _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15)); _sessionMock.Setup(p => p.IsConnected).Returns(true); _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN")); _sessionMock.Setup( p => p.SendMessage( It.Is<GlobalRequestMessage>( g => g.RequestName == GlobalRequestName.TcpIpForward && g.AddressToBind == ForwardedPort.BoundHost && g.PortToBind == ForwardedPort.BoundPort))) .Callback( () => _sessionMock.Raise(s => s.RequestSuccessReceived += null, new MessageEventArgs<RequestSuccessMessage>(new RequestSuccessMessage()))); _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny<WaitHandle>())); _sessionMock.Setup(p => p.SendMessage(It.Is<ChannelOpenFailureMessage>(c => c.LocalChannelNumber == _remoteChannelNumberWhileClosing && c.ReasonCode == ChannelOpenFailureMessage.AdministrativelyProhibited && c.Description == string.Empty && c.Language == "en"))); _sessionMock.Setup(p => p.CreateChannelForwardedTcpip(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted)).Returns(_channelMock.Object); _channelMock.Setup( p => p.Bind( It.Is<IPEndPoint>( ep => ep.Address.Equals(_remoteEndpoint.Address) && ep.Port == _remoteEndpoint.Port), ForwardedPort)).Callback(() => Thread.Sleep(_expectedElapsedTime)); _channelMock.Setup(p => p.Close()); _channelMock.Setup(p => p.Dispose()); _sessionMock.Setup( p => p.SendMessage( It.Is<GlobalRequestMessage>( g => g.RequestName == GlobalRequestName.CancelTcpIpForward && g.AddressToBind == ForwardedPort.BoundHost && g.PortToBind == ForwardedPort.BoundPort))); _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(true)); ForwardedPort.Closing += (sender, args) => { _closingRegister.Add(args); _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs<ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberWhileClosing, _remoteWindowSizeWhileClosing, _remotePacketSizeWhileClosing, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort)))); }; ForwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args); ForwardedPort.Session = _sessionMock.Object; ForwardedPort.Start(); _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs<ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort)))); }
protected void Arrange() { var random = new Random(); _closingRegister = new List <EventArgs>(); _exceptionRegister = new List <ExceptionEventArgs>(); _bindEndpoint = new IPEndPoint(IPAddress.Any, random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort)); _remoteEndpoint = new IPEndPoint(IPAddress.Parse("193.168.1.5"), random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort)); _expectedElapsedTime = TimeSpan.FromMilliseconds(random.Next(100, 500)); ForwardedPort = new ForwardedPortRemote(_bindEndpoint.Address, (uint)_bindEndpoint.Port, _remoteEndpoint.Address, (uint)_remoteEndpoint.Port); _remoteChannelNumberWhileClosing = (uint)random.Next(0, 1000); _remoteWindowSizeWhileClosing = (uint)random.Next(0, int.MaxValue); _remotePacketSizeWhileClosing = (uint)random.Next(0, int.MaxValue); _remoteChannelNumberStarted = (uint)random.Next(0, 1000); _remoteWindowSizeStarted = (uint)random.Next(0, int.MaxValue); _remotePacketSizeStarted = (uint)random.Next(0, int.MaxValue); _originatorAddress = random.Next().ToString(CultureInfo.InvariantCulture); _originatorPort = (uint)random.Next(0, int.MaxValue); _connectionInfoMock = new Mock <IConnectionInfo>(MockBehavior.Strict); _sessionMock = new Mock <ISession>(MockBehavior.Strict); _channelMock = new Mock <IChannelForwardedTcpip>(MockBehavior.Strict); _connectionInfoMock.Setup(p => p.Timeout).Returns(TimeSpan.FromSeconds(15)); _sessionMock.Setup(p => p.IsConnected).Returns(true); _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_FAILURE")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_REQUEST_SUCCESS")); _sessionMock.Setup(p => p.RegisterMessage("SSH_MSG_CHANNEL_OPEN")); _sessionMock.Setup( p => p.SendMessage( It.Is <GlobalRequestMessage>( g => g.RequestName == GlobalRequestName.TcpIpForward && g.AddressToBind == ForwardedPort.BoundHost && g.PortToBind == ForwardedPort.BoundPort))) .Callback( () => _sessionMock.Raise(s => s.RequestSuccessReceived += null, new MessageEventArgs <RequestSuccessMessage>(new RequestSuccessMessage()))); _sessionMock.Setup(p => p.WaitOnHandle(It.IsAny <WaitHandle>())); _sessionMock.Setup(p => p.SendMessage(It.Is <ChannelOpenFailureMessage>(c => c.LocalChannelNumber == _remoteChannelNumberWhileClosing && c.ReasonCode == ChannelOpenFailureMessage.AdministrativelyProhibited && c.Description == string.Empty && c.Language == "en"))); _sessionMock.Setup(p => p.CreateChannelForwardedTcpip(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted)).Returns(_channelMock.Object); _channelMock.Setup( p => p.Bind( It.Is <IPEndPoint>( ep => ep.Address.Equals(_remoteEndpoint.Address) && ep.Port == _remoteEndpoint.Port), ForwardedPort)).Callback(() => Thread.Sleep(_expectedElapsedTime)); _channelMock.Setup(p => p.Close()); _channelMock.Setup(p => p.Dispose()); _sessionMock.Setup( p => p.SendMessage( It.Is <GlobalRequestMessage>( g => g.RequestName == GlobalRequestName.CancelTcpIpForward && g.AddressToBind == ForwardedPort.BoundHost && g.PortToBind == ForwardedPort.BoundPort))); _sessionMock.Setup(p => p.MessageListenerCompleted).Returns(new ManualResetEvent(true)); ForwardedPort.Closing += (sender, args) => { _closingRegister.Add(args); _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs <ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberWhileClosing, _remoteWindowSizeWhileClosing, _remotePacketSizeWhileClosing, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort)))); }; ForwardedPort.Exception += (sender, args) => _exceptionRegister.Add(args); ForwardedPort.Session = _sessionMock.Object; ForwardedPort.Start(); _sessionMock.Raise(p => p.ChannelOpenReceived += null, new MessageEventArgs <ChannelOpenMessage>(new ChannelOpenMessage(_remoteChannelNumberStarted, _remoteWindowSizeStarted, _remotePacketSizeStarted, new ForwardedTcpipChannelInfo(ForwardedPort.BoundHost, ForwardedPort.BoundPort, _originatorAddress, _originatorPort)))); }
private static void RunEx(ClientConfiguration.SshOptions config) { BondManager.CurrentPorts.Clear(); try { _log.Info( $"Starting SSH client with {config.KeepAliveIntervalInSeconds}s keep-alive to {config.Host}:{config.Port} as {config.Username}..."); using (var client = new SshClient(config.Host, config.Port, config.Username, config.Password)) { try { client.Connect(); client.KeepAliveInterval = TimeSpan.FromSeconds(config.KeepAliveIntervalInSeconds); client.ErrorOccurred += delegate(object sender, ExceptionEventArgs e) { _log.Trace(e); }; client.HostKeyReceived += delegate(object sender, HostKeyEventArgs e) { _log.Trace($"Host key received: {e.HostKey}:{e.HostKeyName}"); }; foreach (var forwardedPort in config.SshPorts) { //define port and add it to client var port = new ForwardedPortRemote(forwardedPort.Server, forwardedPort.ServerPort, forwardedPort.Guest, forwardedPort.GuestPort); client.AddForwardedPort(port); //add delegates to handle port exceptions and requests received port.Exception += delegate(object sender, ExceptionEventArgs e) { _log.Info(e.Exception.ToString()); }; port.RequestReceived += delegate(object sender, PortForwardEventArgs e) { _log.Info($"{e.OriginatorHost}:{e.OriginatorPort}—{sender}"); }; //start the port, which will give us connection information back from server port.Start(); //get that bound port from server _log.Info($"Bound port: {port.BoundPort} - Is started?: {port.IsStarted}"); forwardedPort.ServerPort = port.BoundPort; if (!BondManager.CurrentPorts.Contains(forwardedPort)) { BondManager.CurrentPorts.Add(forwardedPort); } } var result = client.RunCommand("uptime"); _log.Info(result.Result); while (client.IsConnected) { // ... hold the port open ... // Thread.Sleep(1000); } } catch (SocketException se) { _log.Error(se); } catch (Exception e) { _log.Error(e); } finally { try { foreach (var port in client.ForwardedPorts) { port.Stop(); client.RemoveForwardedPort(port); _log.Info($"Bound port stopped and removed: {port}"); } } catch (Exception e) { _log.Error(e); } client.Disconnect(); _log.Info($"Client disconnected..."); } } } catch (SocketException se) { _log.Error(se); } catch (Exception e) { _log.Error(e); } }
static void Main(string[] args) { Console.WriteLine("Hello, this is a test SSH connection"); // Setup Credentials and Server Information ConnectionInfo ConnNfo = new ConnectionInfo("192.168.0.106", 22, "pi", new AuthenticationMethod[] { // Pasword based Authentication // new PasswordAuthenticationMethod("pi","catanf85"), // Key Based Authentication (using keys in OpenSSH Format) new PrivateKeyAuthenticationMethod("pi", new PrivateKeyFile[] { new PrivateKeyFile(@"..\test.keys", "") }), } ); // Execute a (SHELL) Command - prepare upload directory using (var sshclient = new SshClient(ConnNfo)) { sshclient.KeepAliveInterval = new TimeSpan(0, 0, 10); sshclient.Connect(); using (var cmd = sshclient.CreateCommand("mkdir -p /tmp/uploadtest && chmod +rw /tmp/uploadtest")) { cmd.Execute(); Console.WriteLine("Command>" + cmd.CommandText); Console.WriteLine("Return Value = {0}", cmd.ExitStatus); } if (sshclient.IsConnected) { try { // esempio di forwarding locale: dalla 22 del server ssh alla 9091 del pc client var port = new ForwardedPortLocal("127.0.0.1", 9091, "127.0.0.1", 22); sshclient.AddForwardedPort(port); port.Start(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } try { // esempio di forwarding remoto: dalla 5001 del pc client alla 50000 del server ssh var port = new ForwardedPortRemote("127.0.0.1", 50000, "127.0.0.1", 5001); sshclient.AddForwardedPort(port); port.Start(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } Console.ReadLine(); sshclient.Disconnect(); } }
private void Form1_Load(object sender, EventArgs e) { Random r = new Random(); var ini_f = new IniFile(@"files\server.ini"); host = ini_f.Read("SSHServer"); port = Convert.ToInt32(ini_f.Read("SSHServerPort")); vncportclt = Convert.ToUInt32(ini_f.Read("LocalVncPortControl")); MinnPort = Convert.ToInt32(ini_f.Read("MinRandomPort")); MaxnPort = Convert.ToInt32(ini_f.Read("MaxRandomPort")); SizePass = 3; logf = AppData + "\\files\\main.log"; var connectionInfo = new ConnectionInfo(host, port, "vncuser", new AuthenticationMethod[] { new PrivateKeyAuthenticationMethod("vncuser", new PrivateKeyFile[] { new PrivateKeyFile(@"files\vncuser.pem", "vnc$Uuser") }), } ); var ssh = new SshClient(connectionInfo); //Port free try { using (var sshcmd = new SshClient(connectionInfo)) { sshcmd.Connect(); var cmd = sshcmd.RunCommand("netstat -tulpan | grep -w 'tcp' | awk '{print $4}' | cut -d ':' -f 2 | uniq"); outputcmd = cmd.Result; sshcmd.Disconnect(); } } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); if (!File.Exists(logf)) { using (StreamWriter sw = File.CreateText(logf)) { sw.WriteLine("Error: " + ex.Message); } } } nPort = (uint)r.Next(MinnPort, MaxnPort); PassVNC = PassGenerate(SizePass) + nPort.ToString(); if (!portav(nPort) && !outputcmd.Contains(nPort.ToString())) { //Calculate pass with help math func if (!File.Exists(logf)) { using (StreamWriter sw = File.CreateText(logf)) { sw.WriteLine("Порт для соединения: " + nPort.ToString()); } } else { try { File.Delete(logf); if (!File.Exists(logf)) { using (StreamWriter sw = File.CreateText(logf)) { sw.WriteLine("Порт для соединения: " + nPort.ToString()); } } } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); if (!File.Exists(logf)) { using (StreamWriter sw = File.CreateText(logf)) { sw.WriteLine("Error: " + ex.Message); } } } } lblPortNotUse.Text = PassVNC; lblPortNotUse.Visible = false; } //Create tunnel try { ssh.Connect(); //System.Threading.Thread.Sleep(2000); if (ssh.IsConnected) { try { var vnctun = new ForwardedPortRemote(IPAddress.Loopback, nPort, IPAddress.Loopback, vncportclt); ssh.AddForwardedPort(vnctun); vnctun.Start(); if (vnctun.IsStarted) { lblMsg.Text = "Соединение установлено"; lblPortNotUse.Visible = true; AddVNCReg(); ProcessStartInfo startvnc = new ProcessStartInfo(); startvnc.FileName = Path.Combine(AppData, "files\\WinVNC.exe"); Process proc = Process.Start(startvnc); } } catch (Exception ex) { MessageBox.Show(ex.Message); using (StreamWriter sw = File.AppendText(logf)) { sw.WriteLine("Error: " + ex.Message); } } } } catch (Exception exConn) { MessageBox.Show(exConn.Message); lblMsg.Text = "Невозможно создать туннель"; using (StreamWriter sw = File.AppendText(logf)) { sw.WriteLine("Connection error: " + exConn.Message); } } }