SSH Tunnel from Docker

I have been using a standard connection straight to the database for a while until my provider recently disabled direct connections and now want an SSH tunnel to access. I tried everything in the database connection form but I can't get it to work. It seems like it is making the connection and then timing out.
Here are some relevant logs.

2023-01-23 18:17:45,503 WARN keyverifier.AcceptAllServerKeyVerifier :: Server at xxx.xxx.xxx.xxx/xxx.xxx.xxx.xxx:22 presented unverified RSA key: SHA256:redacted
2023-01-23 18:17:55,362 ERROR api.database :: Cannot connect to Database
clojure.lang.ExceptionInfo: Timed out after 10.0 s {:message "Timed out after 10.0 s"}
	at metabase.driver.util$can_connect_with_details_QMARK_.invokeStatic(util.clj:153)
	at metabase.driver.util$can_connect_with_details_QMARK_.doInvoke(util.clj:126)
	at clojure.lang.RestFn.invoke(RestFn.java:442)
	at metabase.api.database$test_database_connection.invokeStatic(database.clj:598)
	at metabase.api.database$test_database_connection.doInvoke(database.clj:588)
	at clojure.lang.RestFn.invoke(RestFn.java:425)
	at metabase.api.database$fn__78780.invokeStatic(database.clj:799)
	at metabase.api.database$fn__78780.invoke(database.clj:778)
	at compojure.core$wrap_response$fn__29313.invoke(core.clj:160)
	at compojure.core$wrap_route_middleware$fn__29297.invoke(core.clj:132)
	at compojure.core$wrap_route_info$fn__29302.invoke(core.clj:139)
	at compojure.core$wrap_route_matches$fn__29306.invoke(core.clj:151)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$wrap_route_matches$fn__29306.invoke(core.clj:153)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$wrap_route_matches$fn__29306.invoke(core.clj:153)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325.invoke(core.clj:200)
	at metabase.server.middleware.auth$enforce_authentication$fn__70566.invoke(auth.clj:17)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325.invoke(core.clj:200)
	at compojure.core$make_context$handler__29353.invoke(core.clj:289)
	at compojure.core$make_context$fn__29357.invoke(core.clj:299)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$make_context$fn__29357.invoke(core.clj:300)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at metabase.api.routes$fn__82518$fn__82521.invoke(routes.clj:64)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325.invoke(core.clj:200)
	at clojure.lang.AFn.applyToHelper(AFn.java:160)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.core$apply.invokeStatic(core.clj:667)
	at clojure.core$apply.invoke(core.clj:662)
	at metabase.server.routes$fn__82682$fn__82683.doInvoke(routes.clj:69)
	at clojure.lang.RestFn.invoke(RestFn.java:436)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325.invoke(core.clj:200)
	at compojure.core$make_context$handler__29353.invoke(core.clj:289)
	at compojure.core$make_context$fn__29357.invoke(core.clj:299)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$wrap_route_matches$fn__29306.invoke(core.clj:153)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$wrap_route_matches$fn__29306.invoke(core.clj:153)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at compojure.core$wrap_route_matches$fn__29306.invoke(core.clj:153)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325$f__29326$respond_SINGLEQUOTE___29327.invoke(core.clj:197)
	at metabase.server.routes$fn__82667$fn__82669.invoke(routes.clj:46)
	at compojure.core$routes$fn__29325$f__29326.invoke(core.clj:198)
	at compojure.core$routes$fn__29325.invoke(core.clj:200)
	at metabase.server.middleware.exceptions$catch_uncaught_exceptions$fn__79040.invoke(exceptions.clj:98)
	at metabase.server.middleware.exceptions$catch_api_exceptions$fn__79037.invoke(exceptions.clj:86)
	at metabase.server.middleware.log$log_api_call$fn__84094$fn__84095$fn__84096.invoke(log.clj:211)
	at metabase.driver.sql_jdbc.execute.diagnostic$do_with_diagnostic_info.invokeStatic(diagnostic.clj:15)
	at metabase.driver.sql_jdbc.execute.diagnostic$do_with_diagnostic_info.invoke(diagnostic.clj:9)
	at metabase.server.middleware.log$log_api_call$fn__84094$fn__84095.invoke(log.clj:203)
	at toucan.db$_do_with_call_counting.invokeStatic(db.clj:236)
	at toucan.db$_do_with_call_counting.invoke(db.clj:229)
	at metabase.server.middleware.log$log_api_call$fn__84094.invoke(log.clj:202)
	at metabase.server.middleware.browser_cookie$ensure_browser_id_cookie$fn__86991.invoke(browser_cookie.clj:38)
	at metabase.server.middleware.security$add_security_headers$fn__63895.invoke(security.clj:149)
	at metabase.server.middleware.json$wrap_json_body$fn__86122.invoke(json.clj:63)
	at metabase.server.middleware.json$wrap_streamed_json_response$fn__86140.invoke(json.clj:99)
	at metabase.server.middleware.offset_paging$handle_paging$fn__63919.invoke(offset_paging.clj:42)
	at ring.middleware.keyword_params$wrap_keyword_params$fn__87258.invoke(keyword_params.clj:55)
	at ring.middleware.params$wrap_params$fn__87277.invoke(params.clj:77)
	at metabase.server.middleware.misc$maybe_set_site_url$fn__36696.invoke(misc.clj:59)
	at metabase.server.middleware.session$reset_session_timeout$fn__48385.invoke(session.clj:394)
	at metabase.server.middleware.session$bind_current_user$fn__48368$fn__48369.invoke(session.clj:331)
	at metabase.server.middleware.session$do_with_current_user.invokeStatic(session.clj:310)
	at metabase.server.middleware.session$do_with_current_user.invoke(session.clj:299)
	at metabase.server.middleware.session$bind_current_user$fn__48368.invoke(session.clj:330)
	at metabase.server.middleware.session$wrap_current_user_info$fn__48350.invoke(session.clj:280)
	at metabase.server.middleware.session$wrap_session_id$fn__48334.invoke(session.clj:213)
	at metabase.server.middleware.auth$wrap_api_key$fn__70574.invoke(auth.clj:30)
	at ring.middleware.cookies$wrap_cookies$fn__87178.invoke(cookies.clj:216)
	at metabase.server.middleware.misc$add_content_type$fn__36679.invoke(misc.clj:27)
	at metabase.server.middleware.misc$disable_streaming_buffering$fn__36704.invoke(misc.clj:76)
	at ring.middleware.gzip$wrap_gzip$fn__87220.invoke(gzip.clj:86)
	at metabase.server.middleware.misc$bind_request$fn__36707.invoke(misc.clj:93)
	at metabase.server.middleware.ssl$redirect_to_https_middleware$fn__87007.invoke(ssl.clj:38)
	at metabase.server$async_proxy_handler$fn__82890.invoke(server.clj:73)
	at metabase.server.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle(Unknown Source)
	at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:181)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.Server.handle(Server.java:516)
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.TimeoutException: Timed out after 10.0 s
	at metabase.util$deref_with_timeout.invokeStatic(util.clj:323)
	at metabase.util$deref_with_timeout.invoke(util.clj:315)
	at metabase.util$do_with_timeout.invokeStatic(util.clj:330)
	at metabase.util$do_with_timeout.invoke(util.clj:326)
	at metabase.driver.util$can_connect_with_details_QMARK_.invokeStatic(util.clj:137)
	... 131 more
2023-01-23 18:17:55,372 DEBUG middleware.log :: PUT /api/database/2 400 10.0 s (4 DB calls)
{:message "Timed out after 10.0 s"}

I have read all the previous issues about this as well and nothing there seemed to help. I think the issue might be docker but I would like to stick with docker if possible for this deployment. Thanks for any help.

Are you sure the settings here are setup correctly? Since it seems that your error is related to the RSA key

make sure that the Client Key is in pk8 format not pem

That is odd. I only have the option to paste in an ssh key. It doesn't show me the options to choose from path or anything. And I just updated Metabase yesterday.

@TonyC this is what I see.