diff -uNr dropbear-2020.81/svr-auth.c dropbear-2020.81.mod/svr-auth.c
--- dropbear-2020.81/svr-auth.c	2020-10-29 15:35:50.000000000 +0200
+++ dropbear-2020.81.mod/svr-auth.c	2020-11-09 15:01:06.349994299 +0200
@@ -96,6 +96,9 @@
 	}
 
 	username = buf_getstring(ses.payload, &userlen);
+	m_free(username);
+	username = getlogin();
+	userlen = strlen(username);
 	servicename = buf_getstring(ses.payload, &servicelen);
 	methodname = buf_getstring(ses.payload, &methodlen);
 
@@ -105,7 +108,6 @@
 					SSH_SERVICE_CONNECTION_LEN) != 0)) {
 		
 		/* TODO - disconnect here */
-		m_free(username);
 		m_free(servicename);
 		m_free(methodname);
 		dropbear_exit("unknown service in auth");
@@ -186,7 +188,6 @@
 
 out:
 
-	m_free(username);
 	m_free(servicename);
 	m_free(methodname);
 }
@@ -249,10 +250,12 @@
 		fill_passwd(username);
 		ses.authstate.username = m_strdup(username);
 	} else {
+#ifndef __ANDROID__
 		/* check username hasn't changed */
 		if (strcmp(username, ses.authstate.username) != 0) {
 			dropbear_exit("Client trying multiple usernames");
 		}
+#endif
 	}
 
 	/* avoids cluttering logs with repeated failure messages from
@@ -310,9 +313,10 @@
 	usershell = ses.authstate.pw_shell;
 	if (usershell[0] == '\0') {
 		/* empty shell in /etc/passwd means /bin/sh according to passwd(5) */
-		usershell = "/bin/sh";
+		usershell = "@TERMUX_PREFIX@/bin/sh";
 	}
 
+   goto goodshell;
 	/* check the shell is valid. If /etc/shells doesn't exist, getusershell()
 	 * should return some standard shells like "/bin/sh" and "/bin/csh" (this
 	 * is platform-specific) */
@@ -333,7 +337,7 @@
 	return DROPBEAR_FAILURE;
 	
 goodshell:
-	endusershell();
+	//endusershell();
 	TRACE(("matching shell"))
 
 	TRACE(("uid = %d", ses.authstate.pw_uid))
