diff --git a/ctrl/sbbs.ini b/ctrl/sbbs.ini
index 60836fa62a4db4bfa679cf9f89987bbadecbfaee..d50ae0de75c1ece0b3a6bfd86d3436c2c007c011 100644
--- a/ctrl/sbbs.ini
+++ b/ctrl/sbbs.ini
@@ -173,6 +173,7 @@
 	;       MUTE
 	;       HAPROXY_PROTO
 	;       ALLOW_SFTP
+	;       SSH_ANYAUTH
 	Options = XTRN_MINIMIZED | ALLOW_RLOGIN | ALLOW_SSH
 
 [Mail]	SMTP(S)/POP3(S) Mail Server
diff --git a/src/sbbs3/answer.cpp b/src/sbbs3/answer.cpp
index c08cd997ab015744d9ecded8e0879d11e733d3cc..c47aa5aa832ed33930d5968c7b02bf4a23591403 100644
--- a/src/sbbs3/answer.cpp
+++ b/src/sbbs3/answer.cpp
@@ -254,88 +254,111 @@ bool sbbs_t::answer()
 
 		tmp[0]=0;
 		pthread_mutex_lock(&ssh_mutex);
-		for(ssh_failed=0; ssh_failed < 3; ssh_failed++) {
+
+		if (startup->options & BBS_OPT_SSH_ANYAUTH) {
 			lprintf(LOG_DEBUG, "%04d SSH Setting attribute: SESSINFO_ACTIVE", client_socket);
 			if(cryptStatusError(i=cryptSetAttribute(ssh_session, CRYPT_SESSINFO_ACTIVE, 1))) {
 				log_crypt_error_status_sock(i, "setting session active");
 				activate_ssh = false;
 				// TODO: Add private key here...
-				if(i != CRYPT_ENVELOPE_RESOURCE) {
-					break;
+				if(i == CRYPT_ENVELOPE_RESOURCE) {
+					activate_ssh = set_authresponse(true);
+					lprintf(LOG_DEBUG, "%04d SSH Setting attribute: SESSINFO_ACTIVE", client_socket);
+					i = cryptSetAttribute(ssh_session, CRYPT_SESSINFO_ACTIVE, 1);
+					if (cryptStatusError(i)) {
+						log_crypt_error_status_sock(i, "setting session active");
+						activate_ssh = false;
+					}
+					else {
+						SetEvent(ssh_active);
+					}
 				}
 			}
-			else {
-				SetEvent(ssh_active);
-				break;
-			}
-			free_crypt_attrstr(pubkey);
-			pubkey = nullptr;
-			pubkeysz = 0;
-			ctmp = get_crypt_attribute(ssh_session, CRYPT_SESSINFO_USERNAME);
-			if (ctmp) {
-				SAFECOPY(rlogin_name, parse_login(ctmp));
-				free_crypt_attrstr(ctmp);
-				ctmp = get_crypt_attribute(ssh_session, CRYPT_SESSINFO_PASSWORD);
+		}
+		else {
+			for(ssh_failed=0; ssh_failed < 3; ssh_failed++) {
+				lprintf(LOG_DEBUG, "%04d SSH Setting attribute: SESSINFO_ACTIVE", client_socket);
+				if(cryptStatusError(i=cryptSetAttribute(ssh_session, CRYPT_SESSINFO_ACTIVE, 1))) {
+					log_crypt_error_status_sock(i, "setting session active");
+					activate_ssh = false;
+					// TODO: Add private key here...
+					if(i != CRYPT_ENVELOPE_RESOURCE) {
+						break;
+					}
+				}
+				else {
+					SetEvent(ssh_active);
+					break;
+				}
+				free_crypt_attrstr(pubkey);
+				pubkey = nullptr;
+				pubkeysz = 0;
+				ctmp = get_crypt_attribute(ssh_session, CRYPT_SESSINFO_USERNAME);
 				if (ctmp) {
-					SAFECOPY(tmp, ctmp);
+					SAFECOPY(rlogin_name, parse_login(ctmp));
 					free_crypt_attrstr(ctmp);
+					ctmp = get_crypt_attribute(ssh_session, CRYPT_SESSINFO_PASSWORD);
+					if (ctmp) {
+						SAFECOPY(tmp, ctmp);
+						free_crypt_attrstr(ctmp);
+					}
+					else {
+						free_crypt_attrstr(pubkey);
+						pubkey = get_binary_crypt_attribute(ssh_session, CRYPT_SESSINFO_PUBLICKEY, &pubkeysz);
+					}
+					lprintf(LOG_DEBUG,"SSH login: '%s'", rlogin_name);
 				}
 				else {
-					free_crypt_attrstr(pubkey);
-					pubkey = get_binary_crypt_attribute(ssh_session, CRYPT_SESSINFO_PUBLICKEY, &pubkeysz);
+					rlogin_name[0] = 0;
+					continue;
 				}
-				lprintf(LOG_DEBUG,"SSH login: '%s'", rlogin_name);
-			}
-			else {
-				rlogin_name[0] = 0;
-				continue;
-			}
-			useron.number = find_login_id(&cfg, rlogin_name);
-			if(useron.number) {
-				if (getuserdat(&cfg,&useron) == 0) {
-					if (pubkey) {
-						if (check_pubkey(&cfg, useron.number, pubkey, pubkeysz)) {
-							SAFECOPY(rlogin_pass, tmp);
-							activate_ssh = set_authresponse(true);
+				useron.number = find_login_id(&cfg, rlogin_name);
+				if(useron.number) {
+					if (getuserdat(&cfg,&useron) == 0) {
+						if (pubkey) {
+							if (check_pubkey(&cfg, useron.number, pubkey, pubkeysz)) {
+								SAFECOPY(rlogin_pass, tmp);
+								activate_ssh = set_authresponse(true);
+							}
+						}
+						else {
+							if (stricmp(tmp, useron.pass) == 0) {
+								SAFECOPY(rlogin_pass, tmp);
+								activate_ssh = set_authresponse(true);
+							}
+							else if(ssh_failed) {
+								if(cfg.sys_misc&SM_ECHO_PW)
+									safe_snprintf(str,sizeof(str),"(%04u)  %-25s  FAILED Password attempt: '%s'"
+										,useron.number,useron.alias,tmp);
+								else
+									safe_snprintf(str,sizeof(str),"(%04u)  %-25s  FAILED Password attempt"
+										,useron.number,useron.alias);
+								logline(LOG_NOTICE,"+!",str);
+								badlogin(useron.alias, tmp);
+								useron.number=0;
+							}
 						}
 					}
 					else {
-						if (stricmp(tmp, useron.pass) == 0) {
-							SAFECOPY(rlogin_pass, tmp);
-							activate_ssh = set_authresponse(true);
-						}
-						else if(ssh_failed) {
-							if(cfg.sys_misc&SM_ECHO_PW)
-								safe_snprintf(str,sizeof(str),"(%04u)  %-25s  FAILED Password attempt: '%s'"
-									,useron.number,useron.alias,tmp);
-							else
-								safe_snprintf(str,sizeof(str),"(%04u)  %-25s  FAILED Password attempt"
-									,useron.number,useron.alias);
-							logline(LOG_NOTICE,"+!",str);
-							badlogin(useron.alias, tmp);
-							useron.number=0;
-						}
+						lprintf(LOG_NOTICE, "SSH failed to read user data for %s", rlogin_name);
 					}
 				}
 				else {
-					lprintf(LOG_NOTICE, "SSH failed to read user data for %s", rlogin_name);
+					if(cfg.sys_misc&SM_ECHO_PW)
+						lprintf(LOG_NOTICE, "SSH !UNKNOWN USER: '%s' (password: %s)", rlogin_name, truncsp(tmp));
+					else
+						lprintf(LOG_NOTICE, "SSH !UNKNOWN USER: '%s'", rlogin_name);
+					badlogin(rlogin_name, tmp);
+					// Enable SSH so we can create a new user...
+					activate_ssh = set_authresponse(true);
 				}
+				if (pubkey) {
+					free_crypt_attrstr(pubkey);
+					pubkey = nullptr;
+				}
+				if (!activate_ssh)
+					set_authresponse(false);
 			}
-			else {
-				if(cfg.sys_misc&SM_ECHO_PW)
-					lprintf(LOG_NOTICE, "SSH !UNKNOWN USER: '%s' (password: %s)", rlogin_name, truncsp(tmp));
-				else
-					lprintf(LOG_NOTICE, "SSH !UNKNOWN USER: '%s'", rlogin_name);
-				badlogin(rlogin_name, tmp);
-				// Enable SSH so we can create a new user...
-				activate_ssh = set_authresponse(true);
-			}
-			if (pubkey) {
-				free_crypt_attrstr(pubkey);
-				pubkey = nullptr;
-			}
-			if (!activate_ssh)
-				set_authresponse(false);
 		}
 		if (activate_ssh) {
 			int cid;
@@ -388,7 +411,7 @@ bool sbbs_t::answer()
 					}
 					else if (tnamelen == 9 && strncmp(tname, "subsystem", 9) == 0) {
 						i=cryptGetAttributeString(ssh_session, CRYPT_SESSINFO_SSH_CHANNEL_ARG1, tname, &tnamelen);
-						if (startup->options&BBS_OPT_ALLOW_SFTP && tnamelen == 4 && strncmp(tname, "sftp", 4) == 0) {
+						if (((startup->options & (BBS_OPT_ALLOW_SFTP | BBS_OPT_SSH_ANYAUTH)) == BBS_OPT_ALLOW_SFTP) && tnamelen == 4 && strncmp(tname, "sftp", 4) == 0) {
 							if (useron.number) {
 								activate_ssh = init_sftp(cid);
 								cols = 0;
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 876055bc526146af4aa6edf8098bf82573c059fb..7fbc4b20299b484dde935ac185567423b65c47df 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -1972,7 +1972,7 @@ static int crypt_pop_channel_data(sbbs_t *sbbs, char *inbuf, int want, int *got)
 					if (strcmp(cname, "subsystem") == 0) {
 						ssname = get_crypt_attribute(sbbs->ssh_session, CRYPT_SESSINFO_SSH_CHANNEL_ARG1);
 					}
-					if (startup->options & BBS_OPT_ALLOW_SFTP && ssname && cname && sbbs->sftp_channel == -1 && strcmp(ssname, "sftp") == 0) {
+					if (((startup->options & (BBS_OPT_ALLOW_SFTP | BBS_OPT_SSH_ANYAUTH)) == BBS_OPT_ALLOW_SFTP) && ssname && cname && sbbs->sftp_channel == -1 && strcmp(ssname, "sftp") == 0) {
 						if (sbbs->init_sftp(cid)) {
 							if (tgot > 0) {
 								if (!sftps_recv(sbbs->sftp_state, reinterpret_cast<uint8_t *>(inbuf), tgot))
diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h
index 56ecb0c3ed9ca998f537887c00b8919fd6f78cf3..973743da226a71eadae0d2f699ba9634c3347413 100644
--- a/src/sbbs3/startup.h
+++ b/src/sbbs3/startup.h
@@ -205,6 +205,7 @@ static struct init_field {
 #define BBS_OPT_NO_NEWDAY_EVENTS	(1<<14)	/* Don't check for a new day in event thread */
 #define BBS_OPT_NO_TELNET			(1<<15)	/* Don't accept incoming telnet connections */
 #define BBS_OPT_ALLOW_SFTP			(1<<16)	/* Allow logins via BSD SFTP		*/
+#define BBS_OPT_SSH_ANYAUTH			(1<<17)	/* Blindly accept any SSH credentials */
 #define BBS_OPT_HAPROXY_PROTO   	(1<<26)	/* Incoming requests are via HAproxy */
 #define BBS_OPT_NO_RECYCLE			(1<<27)	/* Disable recycling of server		*/
 #define BBS_OPT_GET_IDENT			(1<<28)	/* Get Identity (RFC 1413)			*/
@@ -233,6 +234,7 @@ static ini_bitdesc_t bbs_options[] = {
 	{ BBS_OPT_NO_NEWDAY_EVENTS ,"NO_NEWDAY_EVENTS" },
 	{ BBS_OPT_NO_TELNET        ,"NO_TELNET"        },
 	{ BBS_OPT_ALLOW_SFTP       ,"ALLOW_SFTP"       },
+	{ BBS_OPT_SSH_ANYAUTH      ,"SSH_ANYAUTH"      },
 	{ BBS_OPT_NO_RECYCLE       ,"NO_RECYCLE"       },
 	{ BBS_OPT_GET_IDENT        ,"GET_IDENT"        },
 	{ BBS_OPT_NO_JAVASCRIPT    ,"NO_JAVASCRIPT"    },