public async Task WhenNonWhitelistedEnvironmentVariablePassed_ThenOpenShellChannelAsyncThrowsRequestDenied(
            [LinuxInstance] ResourceTask <InstanceLocator> instanceLocatorTask)
        {
            var endpoint = new IPEndPoint(
                await InstanceUtil.PublicIpAddressForInstanceAsync(await instanceLocatorTask),
                22);

            using (var key = new RsaSshKey(new RSACng()))
            {
                await InstanceUtil.AddPublicKeyToMetadata(
                    await instanceLocatorTask,
                    "testuser",
                    key).ConfigureAwait(true);

                using (var session = CreateSession())
                    using (var connection = session.Connect(endpoint))
                        using (var authSession = connection.Authenticate("testuser", key))
                        {
                            SshAssert.ThrowsNativeExceptionWithError(
                                session,
                                LIBSSH2_ERROR.CHANNEL_REQUEST_DENIED,
                                () => authSession.OpenShellChannel(
                                    LIBSSH2_CHANNEL_EXTENDED_DATA.MERGE,
                                    DefaultTerminal,
                                    80,
                                    24,
                                    new[]
                            {
                                new EnvironmentVariable("FOO", "foo", true),
                                new EnvironmentVariable("BAR", "bar", true)
                            }));
                        }
            }
        }
Beispiel #2
0
        public async Task WhenDisconnected_ThenOpenExecChannelAsyncThrowsSocketSend(
            [LinuxInstance] ResourceTask <InstanceLocator> instanceLocatorTask)
        {
            var instanceLocator = await instanceLocatorTask;
            var endpoint        = new IPEndPoint(
                await InstanceUtil.PublicIpAddressForInstanceAsync(await instanceLocatorTask),
                22);

            using (var key = new RsaSshKey(new RSACng()))
            {
                await InstanceUtil.AddPublicKeyToMetadata(
                    instanceLocator,
                    "testuser",
                    key).ConfigureAwait(true);

                using (var session = CreateSession())
                    using (var connection = session.Connect(endpoint))
                        using (var authSession = connection.Authenticate("testuser", key))
                        {
                            connection.Dispose();
                            SshAssert.ThrowsNativeExceptionWithError(
                                session,
                                LIBSSH2_ERROR.SOCKET_SEND,
                                () => authSession.OpenExecChannel(
                                    "whoami",
                                    LIBSSH2_CHANNEL_EXTENDED_DATA.NORMAL));
                        }
            }
        }
        public async Task WhenSessionDisconnected_ThenAuthenticateThrowsSocketSend(
            [LinuxInstance] ResourceTask <InstanceLocator> instanceLocatorTask)
        {
            var endpoint = new IPEndPoint(
                await InstanceUtil.PublicIpAddressForInstanceAsync(await instanceLocatorTask),
                22);

            using (var key = new RsaSshKey(new RSACng()))
            {
                await InstanceUtil.AddPublicKeyToMetadata(
                    await instanceLocatorTask,
                    "testuser",
                    key);

                using (var session = CreateSession())
                    using (var connection = session.Connect(endpoint))
                    {
                        connection.Dispose();

                        SshAssert.ThrowsNativeExceptionWithError(
                            session,
                            LIBSSH2_ERROR.SOCKET_SEND,
                            () => connection.Authenticate("testuser", key));
                    }
            }
        }
 public void WhenPortIsNotSsh_ThenHandshakeThrowsDisconnect()
 {
     using (var session = CreateSession())
     {
         SshAssert.ThrowsNativeExceptionWithError(
             session,
             LIBSSH2_ERROR.SOCKET_DISCONNECT,
             () => session.Connect(NonSshEndpoint));
     }
 }
 public void WhenPreferredMethodIsInvalid_ThenSetPreferredMethodsThrowsArgumentException()
 {
     using (var session = CreateSession())
     {
         SshAssert.ThrowsNativeExceptionWithError(
             session,
             LIBSSH2_ERROR.METHOD_NOT_SUPPORTED,
             () => session.SetPreferredMethods(
                 LIBSSH2_METHOD.KEX,
                 new[] { "invalid" }));
     }
 }
        public async Task WhenPublicKeyValidButUnrecognized_ThenAuthenticateThrowsAuthenticationFailed(
            [LinuxInstance] ResourceTask <InstanceLocator> instanceLocatorTask)
        {
            var endpoint = new IPEndPoint(
                await InstanceUtil.PublicIpAddressForInstanceAsync(await instanceLocatorTask),
                22);

            using (var session = CreateSession())
                using (var connection = session.Connect(endpoint))
                    using (var key = new RsaSshKey(new RSACng()))
                    {
                        SshAssert.ThrowsNativeExceptionWithError(
                            session,
                            LIBSSH2_ERROR.AUTHENTICATION_FAILED,
                            () => connection.Authenticate("invaliduser", key));
                    }
        }
        public async Task WhenPreferringIncompatibleAlgorithm_ThenConnectFails(
            [LinuxInstance] ResourceTask <InstanceLocator> instanceLocatorTask)
        {
            var endpoint = new IPEndPoint(
                await InstanceUtil.PublicIpAddressForInstanceAsync(await instanceLocatorTask),
                22);

            using (var session = CreateSession())
            {
                session.SetPreferredMethods(
                    LIBSSH2_METHOD.KEX,
                    new[] { "diffie-hellman-group-exchange-sha1" });

                SshAssert.ThrowsNativeExceptionWithError(
                    session,
                    LIBSSH2_ERROR.KEX_FAILURE,
                    () => session.Connect(endpoint));
            }
        }
        public async Task When2faRequiredAndPromptReturnsNull_ThenPromptIsRetried(
            [LinuxInstance(InitializeScript = RequireSshPassword)] ResourceTask <InstanceLocator> instanceLocatorTask)
        {
            var endpoint = new IPEndPoint(
                await InstanceUtil.PublicIpAddressForInstanceAsync(await instanceLocatorTask),
                22);

            using (var key = new RsaSshKey(new RSACng()))
            {
                await InstanceUtil.AddPublicKeyToMetadata(
                    await instanceLocatorTask,
                    "testuser",
                    key);

                using (var session = CreateSession())
                    using (var connection = session.Connect(endpoint))
                    {
                        var callbackCount = 0;

                        SshAssert.ThrowsNativeExceptionWithError(
                            session,
                            LIBSSH2_ERROR.AUTHENTICATION_FAILED,
                            () => connection.Authenticate(
                                "testuser",
                                key,
                                (name, instruction, prompt, echo) =>
                        {
                            callbackCount++;

                            Assert.AreEqual("Password: ", prompt);
                            Assert.IsFalse(echo);

                            return(null);
                        }));
                        Assert.AreEqual(SshConnectedSession.KeyboardInteractiveRetries, callbackCount);
                    }
            }
        }