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) })); } } }
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); } } }