diff --git a/src/syncterm/ssh.c b/src/syncterm/ssh.c
index c78d8869b184db321a0b8ee776ee9de9d7a51e83..55a055a3a6c4ea716a1ddd4a0418be7a0ecdf2d0 100644
--- a/src/syncterm/ssh.c
+++ b/src/syncterm/ssh.c
@@ -29,8 +29,8 @@
 
 SOCKET          ssh_sock = INVALID_SOCKET;
 CRYPT_SESSION   ssh_session;
-int             ssh_channel;
-bool            ssh_active = true;
+int             ssh_channel = -1;
+bool            ssh_active;
 pthread_mutex_t ssh_mutex;
 pthread_mutex_t ssh_tx_mutex;
 int             sftp_channel = -1;
@@ -739,8 +739,6 @@ ssh_connect(struct bbslist *bbs)
 	if (ssh_sock == INVALID_SOCKET)
 		return -1;
 
-	ssh_active = true;
-
 	if (!bbs->hidepopups)
 		uifc.pop("Creating Session");
 	status = cryptCreateSession(&ssh_session, CRYPT_UNUSED, CRYPT_SESSION_SSH);
@@ -748,6 +746,8 @@ ssh_connect(struct bbslist *bbs)
 		error_popup(bbs, "creating session", status);
 		return -1;
 	}
+	ssh_active = true;
+
 
 	/* we need to disable Nagle on the socket. */
 	if (setsockopt(ssh_sock, IPPROTO_TCP, TCP_NODELAY, (char *)&off, sizeof(off)))
@@ -889,7 +889,6 @@ ssh_connect(struct bbslist *bbs)
 	}
 	FlushData(ssh_session);
 
-	ssh_active = true;
 	if (!bbs->hidepopups) {
 		uifc.pop(NULL);
 		uifc.pop("Clearing Ownership");
@@ -1002,27 +1001,31 @@ ssh_close(void)
 {
 	char garbage[1024];
 
-	cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_READTIMEOUT, 1);
-	cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_WRITETIMEOUT, 1);
 	conn_api.terminate = 1;
-	ssh_active = false;
-	if (sftp_state)
-		sftpc_finish(sftp_state);
-	while (conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1 || pubkey_thread_running) {
-		conn_recv_upto(garbage, sizeof(garbage), 0);
-		SLEEP(1);
+	if (ssh_active) {
+		cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_READTIMEOUT, 1);
+		cryptSetAttribute(ssh_session, CRYPT_OPTION_NET_WRITETIMEOUT, 1);
+		ssh_active = false;
+		if (sftp_state)
+			sftpc_finish(sftp_state);
+		while (conn_api.input_thread_running == 1 || conn_api.output_thread_running == 1 || pubkey_thread_running) {
+			conn_recv_upto(garbage, sizeof(garbage), 0);
+			SLEEP(1);
+		}
+		pthread_mutex_lock(&ssh_mutex);
+		int sc = sftp_channel;
+		pthread_mutex_unlock(&ssh_mutex);
+		if (sc != -1)
+			close_sftp_channel(sc);
+		if (sftp_state)
+			sftpc_end(sftp_state);
+		close_ssh_channel();
+		cryptDestroySession(ssh_session);
+		if (ssh_sock != INVALID_SOCKET) {
+			closesocket(ssh_sock);
+			ssh_sock = INVALID_SOCKET;
+		}
 	}
-	pthread_mutex_lock(&ssh_mutex);
-	int sc = sftp_channel;
-	pthread_mutex_unlock(&ssh_mutex);
-	if (sc != -1)
-		close_sftp_channel(sc);
-	if (sftp_state)
-		sftpc_end(sftp_state);
-	close_ssh_channel();
-	cryptDestroySession(ssh_session);
-	closesocket(ssh_sock);
-	ssh_sock = INVALID_SOCKET;
 	destroy_conn_buf(&conn_inbuf);
 	destroy_conn_buf(&conn_outbuf);
 	FREE_AND_NULL(conn_api.rd_buf);