diff --git a/svr-chansession.c b/svr-chansession.c
index 23dad8c..32cac13 100644
--- a/svr-chansession.c
+++ b/svr-chansession.c
@@ -823,6 +823,7 @@ static void addchildpid(struct ChanSess *chansess, pid_t pid) {
 static void execchild(void *user_data) {
 	struct ChanSess *chansess = user_data;
 	char *usershell = NULL;
+	const char *path = DEFAULT_PATH;
 
     /* with uClinux we'll have vfork()ed, so don't want to overwrite the
      * hostkey. can't think of a workaround to clear it */
@@ -835,6 +836,9 @@ static void execchild(void *user_data) {
 	reseedrandom();
 #endif
 
+    if (getenv("PATH"))
+        path = getenv("PATH");
+
 	/* clear environment */
 	/* if we're debugging using valgrind etc, we need to keep the LD_PRELOAD
 	 * etc. This is hazardous, so should only be used for debugging. */
@@ -878,7 +882,7 @@ static void execchild(void *user_data) {
 	addnewvar("LOGNAME", ses.authstate.pw_name);
 	addnewvar("HOME", ses.authstate.pw_dir);
 	addnewvar("SHELL", get_user_shell());
-	addnewvar("PATH", DEFAULT_PATH);
+	addnewvar("PATH", path);
 	if (chansess->term != NULL) {
 		addnewvar("TERM", chansess->term);
 	}
