Beispiel #1
0
        public ConnectionService(Session session, UserAuthArgs auth)
            : base(session)
        {
            Contract.Requires(auth != null);

            _auth = auth;
        }
Beispiel #2
0
        private void HandleMessage(PasswordRequestMessage message)
        {
            var verifed = true;

            var args = new UserAuthArgs(message.Username, message.Password);

            if (verifed && UserAuth != null)
            {
                UserAuth(this, args);
                verifed = args.Result;
            }

            if (verifed)
            {
                _session.RegisterService(message.ServiceName, args);
                Succeed?.Invoke(this, message.ServiceName);
                _session.SendMessage(new SuccessMessage());
                return;
            }
            else
            {
                _session.SendMessage(new FailureMessage());
                //throw new SshConnectionException("Authentication fail.", DisconnectReason.NoMoreAuthMethodsAvailable);
            }
        }
        public SessionRequestedArgs(SessionChannel channel, string command, UserAuthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(command != null);
            Contract.Requires(userauthArgs != null);

            Channel              = channel;
            CommandText          = command;
            AttachedUserauthArgs = userauthArgs;
        }
        public ConnectionService(Session session, UserAuthArgs auth)
            : base(session)
        {
            Contract.Requires(auth != null);

            _auth = auth;

            // Send keep-alives if no incoming messages within 5 seconds
            _keepAliveTimer = new KeepAliveTimer(5000, SendKeepAlive);

            _session.Disconnected += (ss, ee) => { _keepAliveTimer.Dispose(); };
        }
Beispiel #5
0
        private void HandleMessage(PublicKeyRequestMessage message)
        {
            if (Session._publicKeyAlgorithms.ContainsKey(message.KeyAlgorithmName))
            {
                if (!message.HasSignature)
                {
                    _session.SendMessage(new PublicKeyOkMessage {
                        KeyAlgorithmName = message.KeyAlgorithmName, PublicKey = message.PublicKey
                    });
                    return;
                }

                var keyAlg = Session._publicKeyAlgorithms[message.KeyAlgorithmName](null);
                keyAlg.LoadKeyAndCertificatesData(message.PublicKey);

                var sig     = keyAlg.GetSignature(message.Signature);
                var verifed = false;

                using (var worker = new SshDataWorker())
                {
                    worker.WriteBinary(_session.SessionId);
                    worker.Write(message.PayloadWithoutSignature);

                    verifed = keyAlg.VerifyData(worker.ToByteArray(), sig);
                }

                var args = new UserAuthArgs(message.KeyAlgorithmName, keyAlg.GetFingerprint(), message.PublicKey);
                if (verifed && UserAuth != null)
                {
                    UserAuth(this, args);
                    verifed = args.Result;
                }

                if (verifed)
                {
                    _session.RegisterService(message.ServiceName, args);
                    Succeed?.Invoke(this, message.ServiceName);
                    _session.SendMessage(new SuccessMessage());
                    return;
                }
                else
                {
                    _session.SendMessage(new FailureMessage());
                    throw new SshConnectionException("Authentication fail.", DisconnectReason.NoMoreAuthMethodsAvailable);
                }
            }
            _session.SendMessage(new FailureMessage());
        }
Beispiel #6
0
        public PtyArgs(SessionChannel channel, string terminal, uint heightPx, uint heightRows, uint widthPx, uint widthChars, string modes, UserAuthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(terminal != null);
            Contract.Requires(modes != null);
            Contract.Requires(userauthArgs != null);

            Channel = channel;
            Terminal = terminal;
            HeightPx = heightPx;
            HeightRows = heightRows;
            WidthPx = widthPx;
            WidthChars = widthChars;
            Modes = modes;

            AttachedUserAuthArgs = userauthArgs;
        }
Beispiel #7
0
 public SessionRequestedArgs(SessionChannel channel, string command, UserAuthArgs userauthArgs)
     : this(channel, null, command, userauthArgs)
 {
 }