/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns> /// Result of authentication process. /// </returns> public override AuthenticationResult Authenticate(Session session) { session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; session.RegisterMessage("SSH_MSG_USERAUTH_PK_OK"); foreach (var keyFile in KeyFiles) { _authenticationCompleted.Reset(); _isSignatureRequired = false; var message = new RequestMessagePublicKey(ServiceName.Connection, Username, keyFile.HostKey.Name, keyFile.HostKey.Data); if (KeyFiles.Count < 2) { // If only one key file provided then send signature for very first request var signatureData = new SignatureData(message, session.SessionId).GetBytes(); message.Signature = keyFile.HostKey.Sign(signatureData); } // Send public key authentication request session.SendMessage(message); session.WaitOnHandle(_authenticationCompleted); if (_isSignatureRequired) { _authenticationCompleted.Reset(); var signatureMessage = new RequestMessagePublicKey(ServiceName.Connection, Username, keyFile.HostKey.Name, keyFile.HostKey.Data); var signatureData = new SignatureData(message, session.SessionId).GetBytes(); signatureMessage.Signature = keyFile.HostKey.Sign(signatureData); // Send public key authentication request with signature session.SendMessage(signatureMessage); } session.WaitOnHandle(_authenticationCompleted); if (_authenticationResult == AuthenticationResult.Success) { break; } } session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; session.UnRegisterMessage("SSH_MSG_USERAUTH_PK_OK"); return(_authenticationResult); }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns></returns> public override AuthenticationResult Authenticate(Session session) { if (this.Protocol == null) { return(AuthenticationResult.Failure); } session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; session.RegisterMessage("SSH_MSG_USERAUTH_PK_OK"); foreach (var identity in this.Protocol.GetIdentities()) { this._authenticationCompleted.Reset(); this._isSignatureRequired = false; var message = new RequestMessagePublicKey(ServiceName.Connection, this.Username, identity.Type, identity.Blob); // Send public key authentication request session.SendMessage(message); session.WaitOnHandle(this._authenticationCompleted); if (this._isSignatureRequired) { this._authenticationCompleted.Reset(); var signatureMessage = new RequestMessagePublicKey(ServiceName.Connection, this.Username, identity.Type, identity.Blob); var signatureData = new SignatureData(message, session.SessionId).GetBytes(); signatureMessage.Signature = this.Protocol.SignData(identity, signatureData); // Send public key authentication request with signature session.SendMessage(signatureMessage); } session.WaitOnHandle(this._authenticationCompleted); if (this._authenticationResult == AuthenticationResult.Success) { break; } } session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; session.UnRegisterMessage("SSH_MSG_USERAUTH_PK_OK"); return(this._authenticationResult); }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns>Result of authentication process.</returns> public override AuthenticationResult Authenticate(Session session) { this._session = session; session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; session.RegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); session.SendMessage(this._requestMessage); session.WaitOnHandle(this._authenticationCompleted); session.UnRegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; if (this._exception != null) { throw this._exception; } return this._authenticationResult; }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns> /// Result of authentication process. /// </returns> /// <exception cref="System.ArgumentNullException"><paramref name="session" /> is null.</exception> public override AuthenticationResult Authenticate(Session session) { if (session == null) { throw new ArgumentNullException("session"); } _session = session; session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; try { session.RegisterMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ"); session.SendMessage(_requestMessage); session.WaitOnHandle(_authenticationCompleted); } finally { session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; } if (_exception != null) { throw _exception; } return(_authenticationResult); }
/// <summary> /// Starts remote port forwarding. /// </summary> protected override void StartPort() { Session.RegisterMessage("SSH_MSG_REQUEST_FAILURE"); Session.RegisterMessage("SSH_MSG_REQUEST_SUCCESS"); Session.RegisterMessage("SSH_MSG_CHANNEL_OPEN"); Session.RequestSuccessReceived += Session_RequestSuccess; Session.RequestFailureReceived += Session_RequestFailure; Session.ChannelOpenReceived += Session_ChannelOpening; // send global request to start direct tcpip Session.SendMessage(new GlobalRequestMessage(GlobalRequestName.TcpIpForward, true, BoundHost, BoundPort)); // wat for response on global request to start direct tcpip Session.WaitOnHandle(_globalRequestResponse); if (!_requestStatus) { // when the request to start port forward was rejected, then we're no longer // interested in these events Session.RequestSuccessReceived -= Session_RequestSuccess; Session.RequestFailureReceived -= Session_RequestFailure; Session.ChannelOpenReceived -= Session_ChannelOpening; throw new SshException(string.Format(CultureInfo.CurrentCulture, "Port forwarding for '{0}' port '{1}' failed to start.", Host, Port)); } _isStarted = true; }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns>Result of authentication process.</returns> public override AuthenticationResult Authenticate(Session session) { _session = session; session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.UserAuthenticationInformationRequestReceived += Session_UserAuthenticationInformationRequestReceived; session.RegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); try { session.SendMessage(_requestMessage); session.WaitOnHandle(_authenticationCompleted); } finally { session.UnRegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.UserAuthenticationInformationRequestReceived -= Session_UserAuthenticationInformationRequestReceived; } if (_exception != null) { throw _exception; } return(_authenticationResult); }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns>Result of authentication process.</returns> public override AuthenticationResult Authenticate(Session session) { _session = session; session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.UserAuthenticationInformationRequestReceived += Session_UserAuthenticationInformationRequestReceived; session.RegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); try { session.SendMessage(_requestMessage); session.WaitOnHandle(_authenticationCompleted); } finally { session.UnRegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.UserAuthenticationInformationRequestReceived -= Session_UserAuthenticationInformationRequestReceived; } if (_exception != null) throw _exception; return _authenticationResult; }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns>Result of authentication process.</returns> public override AuthenticationResult Authenticate(Session session) { this._session = session; session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; session.RegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); session.SendMessage(this._requestMessage); session.WaitOnHandle(this._authenticationCompleted); session.UnRegisterMessage("SSH_MSG_USERAUTH_INFO_REQUEST"); session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; if (this._exception != null) { throw this._exception; } return(this._authenticationResult); }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns> /// Result of authentication process. /// </returns> public override AuthenticationResult Authenticate(Session session) { session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; session.RegisterMessage("SSH_MSG_USERAUTH_PK_OK"); foreach (var keyFile in KeyFiles) { _authenticationCompleted.Reset(); _isSignatureRequired = false; var message = new RequestMessagePublicKey(ServiceName.Connection, Username, keyFile.HostKey.Name, keyFile.HostKey.Data); if (KeyFiles.Count < 2) { // If only one key file provided then send signature for very first request var signatureData = new SignatureData(message, session.SessionId).GetBytes(); message.Signature = keyFile.HostKey.Sign(signatureData); } // Send public key authentication request session.SendMessage(message); session.WaitOnHandle(_authenticationCompleted); if (_isSignatureRequired) { _authenticationCompleted.Reset(); var signatureMessage = new RequestMessagePublicKey(ServiceName.Connection, Username, keyFile.HostKey.Name, keyFile.HostKey.Data); var signatureData = new SignatureData(message, session.SessionId).GetBytes(); signatureMessage.Signature = keyFile.HostKey.Sign(signatureData); // Send public key authentication request with signature session.SendMessage(signatureMessage); } session.WaitOnHandle(_authenticationCompleted); if (_authenticationResult == AuthenticationResult.Success) { break; } } session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; session.UnRegisterMessage("SSH_MSG_USERAUTH_PK_OK"); return _authenticationResult; }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns></returns> public override AuthenticationResult Authenticate(Session session) { if (this.Protocol == null) return AuthenticationResult.Failure; session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; session.RegisterMessage("SSH_MSG_USERAUTH_PK_OK"); foreach (var identity in this.Protocol.GetIdentities()) { this._authenticationCompleted.Reset(); this._isSignatureRequired = false; var message = new RequestMessagePublicKey(ServiceName.Connection, this.Username, identity.Type, identity.Blob); // Send public key authentication request session.SendMessage(message); session.WaitOnHandle(this._authenticationCompleted); if (this._isSignatureRequired) { this._authenticationCompleted.Reset(); var signatureMessage = new RequestMessagePublicKey(ServiceName.Connection, this.Username, identity.Type, identity.Blob); var signatureData = new SignatureData(message, session.SessionId).GetBytes(); signatureMessage.Signature = this.Protocol.SignData(identity, signatureData); // Send public key authentication request with signature session.SendMessage(signatureMessage); } session.WaitOnHandle(this._authenticationCompleted); if (this._authenticationResult == AuthenticationResult.Success) { break; } } session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; session.UnRegisterMessage("SSH_MSG_USERAUTH_PK_OK"); return this._authenticationResult; }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session.</param> /// <returns> /// Result of authentication process. /// </returns> /// <exception cref="System.ArgumentNullException"><paramref name="session" /> is null.</exception> public override AuthenticationResult Authenticate(Session session) { if (session == null) throw new ArgumentNullException("session"); session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.SendMessage(new RequestMessageNone(ServiceName.Connection, this.Username)); session.WaitOnHandle(this._authenticationCompleted); session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; return this._authenticationResult; }
/// <summary> /// Starts remote port forwarding. /// </summary> protected override void StartPort() { if (!ForwardedPortStatus.ToStarting(ref _status)) { return; } InitializePendingChannelCountdown(); try { Session.RegisterMessage("SSH_MSG_REQUEST_FAILURE"); Session.RegisterMessage("SSH_MSG_REQUEST_SUCCESS"); Session.RegisterMessage("SSH_MSG_CHANNEL_OPEN"); Session.RequestSuccessReceived += Session_RequestSuccess; Session.RequestFailureReceived += Session_RequestFailure; Session.ChannelOpenReceived += Session_ChannelOpening; // send global request to start forwarding Session.SendMessage(new TcpIpForwardGlobalRequestMessage(BoundHost, BoundPort)); // wat for response on global request to start direct tcpip Session.WaitOnHandle(_globalRequestResponse); if (!_requestStatus) { throw new SshException(string.Format(CultureInfo.CurrentCulture, "Port forwarding for '{0}' port '{1}' failed to start.", Host, Port)); } } catch (Exception) { // mark port stopped _status = ForwardedPortStatus.Stopped; // when the request to start port forward was rejected or failed, then we're no longer // interested in these events Session.RequestSuccessReceived -= Session_RequestSuccess; Session.RequestFailureReceived -= Session_RequestFailure; Session.ChannelOpenReceived -= Session_ChannelOpening; throw; } _status = ForwardedPortStatus.Started; }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session.</param> /// <returns> /// Result of authentication process. /// </returns> /// <exception cref="System.ArgumentNullException"><paramref name="session" /> is null.</exception> public override AuthenticationResult Authenticate(Session session) { if (session == null) { throw new ArgumentNullException("session"); } session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.SendMessage(new RequestMessageNone(ServiceName.Connection, this.Username)); session.WaitOnHandle(this._authenticationCompleted); session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; return(this._authenticationResult); }
/// <summary> /// Authenticates the specified session. /// </summary> /// <param name="session">The session to authenticate.</param> /// <returns> /// Result of authentication process. /// </returns> /// <exception cref="System.ArgumentNullException"><paramref name="session" /> is null.</exception> public override AuthenticationResult Authenticate(Session session) { if (session == null) throw new ArgumentNullException("session"); _session = session; session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived += Session_UserAuthenticationFailureReceived; session.MessageReceived += Session_MessageReceived; try { session.RegisterMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ"); session.SendMessage(_requestMessage); session.WaitOnHandle(_authenticationCompleted); } finally { session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; session.UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived; session.MessageReceived -= Session_MessageReceived; } if (_exception != null) throw _exception; return _authenticationResult; }