diff --git a/ChangeLog.d/bugfix/ZBX-26571 b/ChangeLog.d/bugfix/ZBX-26571
new file mode 100644
index 00000000000..7bbb092fa31
--- /dev/null
+++ b/ChangeLog.d/bugfix/ZBX-26571
@@ -0,0 +1 @@
+.......PS. [ZBX-26571] added support of source ip for libssh based items (MVekslers)
diff --git a/src/libs/zbxpoller/ssh_run.c b/src/libs/zbxpoller/ssh_run.c
index 23230c509b2..31d6cec241e 100644
--- a/src/libs/zbxpoller/ssh_run.c
+++ b/src/libs/zbxpoller/ssh_run.c
@@ -188,9 +188,10 @@ static int	ssh_nonblocking_error(ssh_session session, int errcode, int errcode_a
 int	ssh_run(zbx_dc_item_t *item, AGENT_RESULT *result, const char *encoding, const char *options, int timeout,
 		const char *config_source_ip, const char *config_ssh_key_location)
 {
+	zbx_socket_t	s;
 	ssh_session	session;
 	ssh_channel	channel;
-	ssh_key 	privkey = NULL, pubkey = NULL;
+	ssh_key		privkey = NULL, pubkey = NULL;
 	int		rc, userauth, ret = NOTSUPPORTED;
 	char		*output, *publickey = NULL, *privatekey = NULL, *buffer = NULL, *err_msg = NULL;
 	char		tmp_buf[DATA_BUFFER_SIZE], userauthlist[64];
@@ -199,8 +200,6 @@ int	ssh_run(zbx_dc_item_t *item, AGENT_RESULT *result, const char *encoding, con
 
 	zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __func__);
 
-	ZBX_UNUSED(config_source_ip);
-
 	/* initializes an SSH session object */
 	if (NULL == (session = ssh_new()))
 	{
@@ -212,19 +211,26 @@ int	ssh_run(zbx_dc_item_t *item, AGENT_RESULT *result, const char *encoding, con
 
 	zbx_ts_get_deadline(&deadline, 0 == timeout ? SEC_PER_YEAR : timeout);
 
-	/* set blocking mode on session */
-	ssh_set_blocking(session, 0);
+	if (FAIL == zbx_tcp_connect(&s, config_source_ip, item->interface.addr, item->interface.port, timeout,
+			ZBX_TCP_SEC_UNENCRYPTED, NULL, NULL))
+	{
+		SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot connect to SSH server: %s", zbx_socket_strerror()));
+		goto session_free;
+	}
 
 	/* create a session instance and start it up */
-	if (0 != ssh_options_set(session, SSH_OPTIONS_HOST, item->interface.addr) ||
+	if (0 != ssh_options_set(session, SSH_OPTIONS_FD, &s.socket) ||
+			0 != ssh_options_set(session, SSH_OPTIONS_HOST, item->interface.addr) ||
 			0 != ssh_options_set(session, SSH_OPTIONS_PORT, &item->interface.port) ||
 			0 != ssh_options_set(session, SSH_OPTIONS_USER, item->username))
 	{
 		SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot set SSH session options: %s",
 				ssh_get_error(session)));
-		goto session_free;
+		goto tcp_session_free;
 	}
 
+	ssh_set_blocking(session, 0);
+
 	if (0 < strlen(options))
 	{
 		int	proc_config = 0;
@@ -233,13 +239,13 @@ int	ssh_run(zbx_dc_item_t *item, AGENT_RESULT *result, const char *encoding, con
 		{
 			SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot turn off SSH default config processing: %s",
 					ssh_get_error(session)));
-			goto session_free;
+			goto tcp_session_free;
 		}
 
 		if (SUCCEED != ssh_parse_options(session, options, &err_msg))
 		{
 			SET_MSG_RESULT(result, err_msg);
-			goto session_free;
+			goto tcp_session_free;
 		}
 	}
 
@@ -250,7 +256,7 @@ int	ssh_run(zbx_dc_item_t *item, AGENT_RESULT *result, const char *encoding, con
 			SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Cannot establish SSH session: %s", err_msg));
 			zbx_free(err_msg);
 
-			goto session_free;
+			goto tcp_session_free;
 		}
 	}
 
@@ -537,6 +543,8 @@ session_close:
 	if (NULL != pubkey)
 		ssh_key_free(pubkey);
 	ssh_disconnect(session);
+tcp_session_free:
+	zbx_tcp_close(&s);
 session_free:
 	ssh_free(session);
 close:
