better warnings if connection object cannot be instantiated
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/RemoteExecTaskConfigHelper.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/RemoteExecTaskConfigHelper.java
index df23522..0219f57 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/RemoteExecTaskConfigHelper.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/RemoteExecTaskConfigHelper.java
@@ -40,6 +40,7 @@
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.core.task.ssh.ConnectionDefinition;
 import org.apache.brooklyn.util.core.task.system.internal.ExecWithLoggingHelpers;
+import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.net.Networking;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,6 +48,7 @@
 import java.net.InetAddress;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 
 public class RemoteExecTaskConfigHelper {
     public interface RemoteExecCapability {
@@ -139,14 +141,23 @@
         }
 
         private Map<String, Object> resolveConnectionSettings() {
-            MutableMap<String, Object> config = MutableMap.of();
-            definition.getOther()
-                    .forEach((k, v) -> config.put(k, v instanceof WrappedValue ? ((WrappedValue<Object>) v).get() : v));
-            config.put("user", WrappedValue.getMaybe(definition.getUser()).or(() -> System.getProperty("user.name")));
-            config.put("password",  WrappedValue.get(definition.getPassword()));
-            config.put("host", WrappedValue.get(definition.getHost()));
-            config.put("port", WrappedValue.getMaybe(definition.getPort()).or("22"));
-            return config;
+            AtomicReference<String> s = new AtomicReference<>();
+            try {
+                MutableMap<String, Object> config = MutableMap.of();
+                definition.getOther()
+                        .forEach((k, v) -> {
+                            s.set(k);
+                            config.put(k, v instanceof WrappedValue ? ((WrappedValue<Object>) v).get() : v);
+                        });
+                s.set("user"); config.put(s.get(), WrappedValue.getMaybe(definition.getUser()).or(() -> System.getProperty("user.name")));
+                s.set("password"); config.put(s.get(), WrappedValue.get(definition.getPassword()));
+                s.set("host"); config.put(s.get(), WrappedValue.get(definition.getHost()));
+                s.set("port"); config.put(s.get(), WrappedValue.getMaybe(definition.getPort()).or("22"));
+                return config;
+            } catch (Throwable e) {
+                Exceptions.propagateIfFatal(e);
+                throw new IllegalArgumentException("Connection settings could not be resolved (resolving '"+s+"')", e);
+            }
         }
 
         @Override