diff --git a/examples/cluster.py b/examples/cluster.py
index e5f374b8caacf2b84d82062a1c5fb7f336e42307..093df6686ddc7dc00cee467b3729b6dc663e2dab 100755
--- a/examples/cluster.py
+++ b/examples/cluster.py
@@ -125,12 +125,8 @@ def __init__( self, name, server=None, user=None, serverIP=None,
         if server == 'localhost':
             server = None
         self.server = server
-        if not serverIP:
-                serverIP = self.findServerIP( server )
-        self.serverIP = serverIP
-        if not user:
-            user = quietRun( 'echo $SUDO_USER' )
-        self.user = user
+        self.serverIP = serverIP if serverIP else self.findServerIP( server )
+        self.user = user if user else self.findUser()
         if self.user and self.server:
             self.dest = '%s@%s' % ( self.user, self.serverIP )
         else:
@@ -146,6 +142,20 @@ def __init__( self, name, server=None, user=None, serverIP=None,
         self.splitInit = splitInit
         super( RemoteMixin, self ).__init__( name, **kwargs )
 
+    @staticmethod
+    def findUser():
+        "Try to return logged-in (usually non-root) user"
+        try:
+            # If we're running sudo
+            return os.environ[ 'SUDO_USER' ]
+        except:
+            try:
+                # Logged-in user (if we have a tty)
+                return quietRun( 'who am i' ).split()[ 0 ]
+            except:
+                # Give up and return effective user
+                return quietRun( 'whoami' )
+
     # Determine IP address of local host
     _ipMatchRegex = re.compile( r'\d+\.\d+\.\d+\.\d+' )
 
@@ -593,9 +603,7 @@ def __init__( self, *args, **kwargs ):
         if not self.serverIP:
             self.serverIP = { server: RemoteMixin.findServerIP( server )
                               for server in self.servers }
-        self.user = params.pop( 'user', None )
-        if self.servers and not self.user:
-            self.user = quietRun( 'echo $SUDO_USER' )
+        self.user = params.pop( 'user', RemoteMixin.findUser() )
         if params.pop( 'precheck' ):
             self.precheck()
         self.connections = {}