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 = {}