{"id":1048,"date":"2024-03-06T00:12:14","date_gmt":"2024-03-05T23:12:14","guid":{"rendered":"https:\/\/www.bellingo.de\/blog\/?p=1048"},"modified":"2024-03-06T00:12:15","modified_gmt":"2024-03-05T23:12:15","slug":"how-to-ssh-tunnel-to-aws-external-databases-devblog-33","status":"publish","type":"post","link":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/","title":{"rendered":"How to SSH Tunnel to AWS-external Databases (DevBlog #33)"},"content":{"rendered":"\n<p>How to what?? Sorry for the messy headline. That&#8217;s what happens when you try to cram every relevant aspect of an article into a half-sentence. So here is what I try to say with it: <a href=\"https:\/\/docs.aws.amazon.com\/rds\/\" target=\"_blank\" rel=\"noreferrer noopener\">RDS databases<\/a> on AWS are <em>expensive<\/em>, and if you don&#8217;t utilize them heavily, try to avoid them! On my web space at <a href=\"https:\/\/www.df.eu\/de\/\" target=\"_blank\" rel=\"noreferrer noopener\">DomainFactory<\/a>, I have 10 databases included in my plan, so why not use them instead! Sounds like no big deal, but you need to know some things about <a href=\"https:\/\/www.ssh.com\/academy\/ssh\/tunneling\" target=\"_blank\" rel=\"noreferrer noopener\">SSH tunnels<\/a> and Unix Domain Sockets to pull it off. Here is what worked for me, and hopefully will help you as well.<\/p>\n\n\n\n<!--more-->\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"alignright size-medium\"><a href=\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/02\/AWS-Costs-Screenshot.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"208\" src=\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/02\/AWS-Costs-Screenshot-300x208.png\" alt=\"\" class=\"wp-image-1049\" srcset=\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/02\/AWS-Costs-Screenshot-300x208.png 300w, https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/02\/AWS-Costs-Screenshot.png 397w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><\/div>\n\n\n<p>The DataServer for my game <em><a href=\"https:\/\/www.bellingo.de\/blog\/devblog-the-idea-behind-network-traders\/\">Network Traders<\/a> <\/em>runs on an AWS EC2 instance, the smallest type, <em>t2.nano<\/em>, you can get. For convenience reasons (and since I tried before unsuccessfully) the database underneath also used an AWS service called RDS (Relational Database Service). Both are included in the free tier you can use for 12 months, but it gets interesting afterwards. On the right, you can see a typical bill for the AWS services I used after the free tier expired.<\/p>\n\n\n\n<div class='code-block code-block-2' style='margin: 8px 0; clear: both;'>\n<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-5801154588989661\"\n     crossorigin=\"anonymous\"><\/script>\n<!-- Posts Standard -->\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-client=\"ca-pub-5801154588989661\"\n     data-ad-slot=\"5874520813\"\n     data-ad-format=\"auto\"\n     data-full-width-responsive=\"true\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\">Opening an SSH Tunnel in C#<\/h2>\n\n\n\n<p>$16.88 (+ tax) a month is way too much for a game that is played by a handful of players only. Even for an enthusiast like me. But luckily, there are alternatives. DomainFactory is a typical webhosting service like many others. I am using it, e.g., to host this <a href=\"https:\/\/en-gb.wordpress.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">WordPress<\/a> blog, which also requires a database. For security reasons, these databases are not accessible from outside. They are meant to be used by your web services hosted by DomainFactory. But it is possible to <a href=\"https:\/\/linux.die.net\/man\/1\/ssh\" target=\"_blank\" rel=\"noreferrer noopener\">open an ssh tunnel<\/a> to your host environment there like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -N -L 5001:\/var\/lib\/mysql\/mysql.sock ssh-user@domain.tld<\/code><\/pre>\n\n\n\n<p>Now you can access your databases using port 5001 on your local machine, which forwards all your requests to the remote database. <\/p>\n\n\n\n<p>Now, there are to ways of making use of this. The straight-forward one is to just open this tunnel when your server spins up and leave it open. But that is not the idea &#8211; the tunnel should not be open longer than necessary. And anyway, it is only possible to keep two ssh tunnels open at the same time (a limitation by DomainFactory). So better not waste them.<\/p>\n\n\n\n<p>With Network Traders, database access is very sporadic. Whenever a player connects to the server, database access is required. If no player is playing, the connection can be closed. However, I had no idea how to translate the shell command above into C# code for my game server. So I did what people do nowadays if they want to solve a problem: I asked the <a href=\"https:\/\/chat.openai.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Generative AI<\/a> of my trust.<\/p>\n\n\n\n<p><em>ChatGPT, how do I open an ssh tunnel in C#?<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-default\"><a href=\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/SSHTunnelCode.png\"><img loading=\"lazy\" decoding=\"async\" width=\"747\" height=\"650\" src=\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/SSHTunnelCode.png\" alt=\"Code example for opening an SSH tunnel\" class=\"wp-image-1055\" srcset=\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/SSHTunnelCode.png 747w, https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/SSHTunnelCode-300x261.png 300w\" sizes=\"auto, (max-width: 747px) 100vw, 747px\" \/><\/a><figcaption class=\"wp-element-caption\">ChatGPT output (excerpt) for opening an ssh tunnel<\/figcaption><\/figure>\n\n\n\n<p>That was easy, wasn`&#8217;t it? Well, yes &#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tunnels and Unix Domain Sockets<\/h2>\n\n\n\n<p>The code example ChatGPT provides uses the library <em><a href=\"https:\/\/github.com\/sshnet\/SSH.NET\" target=\"_blank\" rel=\"noreferrer noopener\">Renci.SshNet<\/a><\/em>, a widely used C# implementation of the SSH-2 protocol. This approach is, of course, not an invention of ChatGPT, but found in other tutorials as well, such as <a href=\"https:\/\/mysqlconnector.net\/tutorials\/connect-ssh\/\">for MariaDB<\/a>.<\/p>\n\n\n\n<p>So far so good, but there was one further hurdle I had to grapple with. In the ssh call above you can see that the DomainFactory ssh server does not connect to the database via a TCP port. Instead, it uses a so-called <a href=\"https:\/\/en.wikipedia.org\/wiki\/Unix_domain_socket\">Unix domain socket<\/a>. This is <em>the<\/em> common protocol for inter-process communication on Unix-like systems. Unfortunately, <strong><em>SshNet does not support Unix domain sockets!<\/em><\/strong> <\/p>\n\n\n\n<p>Well, at least not normally. After spending a couple of hours trying to understand the exact problem (where ChatGPT was no help) and internet research, I came across an <a href=\"https:\/\/github.com\/sshnet\/SSH.NET\/issues\/238\" target=\"_blank\" rel=\"noreferrer noopener\">issue report<\/a> on the SshNet issue tracker. In 2017, the contributor <a href=\"https:\/\/github.com\/tmds\" target=\"_blank\" rel=\"noreferrer noopener\">Tom Deseyn<\/a> had already implemented just what I needed, but it had never made it onto the master branch.<\/p>\n\n\n\n<p>What I did then to solve my problem is something I do not recommend to do &#8211; I am not sure myself if this is a good idea. I went back to the <a href=\"https:\/\/github.com\/tmds\/SSH.NET\/tree\/unix-socket\" target=\"_blank\" rel=\"noreferrer noopener\">orphaned branch<\/a> with the Unix domain socket implementation and cloned it locally. Getting this old version to compile properly required some fiddling about, but I finally made it work on .NET 8. But keep in mind: no bugfixes included since 2017! Since no one has direct access to the game server and the database host, this is probably okay, but it is definitely not ideal. I would love to see this feature included in SshNet officially.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Further Cost Optimizations<\/h2>\n\n\n\n<p>After migrating my database from AWS RDS to DomainFactory databases, my monthly bill has reduced drastically. But there was further potential for reducing cost. AWS offers so-called <a href=\"https:\/\/docs.aws.amazon.com\/savingsplans\/latest\/userguide\/what-is-savings-plans.html\" target=\"_blank\" rel=\"noreferrer noopener\">savings plans<\/a>, where you basically guarantee to use a certain amount of processing time. This planning certainty is reimbursed by Amazon with a considerable rebate.<\/p>\n\n\n\n<p>So everthing should be shiny now, shouldn&#8217;t it? I could now run my game server instance for less than $4 a month (in addition to what I pay anyway for the databases). Well, it should &#8230; if AWS had not decided to put some pressure on those folks <a href=\"https:\/\/aws.amazon.com\/de\/blogs\/aws\/new-aws-public-ipv4-address-charge-public-ip-insights\/\" target=\"_blank\" rel=\"noreferrer noopener\">still using IP4 addresses<\/a> and charge them extra, just from this month on! <\/p>\n\n\n\n<p>But that is to be solved another day.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to what?? Sorry for the messy headline. That&#8217;s what happens when you try to cram every relevant aspect of an article into a half-sentence. So here is what I try to say with it: RDS databases on AWS are expensive, and if you don&#8217;t utilize them heavily, try to avoid them! On my web &hellip; <a href=\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\" class=\"more-link\"><span class=\"screen-reader-text\">How to SSH Tunnel to AWS-external Databases (DevBlog #33)<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":1052,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[229,49],"tags":[63,437,353,379,435,427,381,425,429,431,433],"class_list":["post-1048","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devblog","category-game-development","tag-aws-en","tag-chatgpt","tag-database","tag-devblog-en","tag-domainfactory","tag-mariadb","tag-network-traders-en","tag-rds","tag-ssh","tag-tunneling","tag-unix-domain-socket"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to SSH Tunnel to AWS-external Databases (DevBlog #33) - Games:Tech:Blog<\/title>\n<meta name=\"description\" content=\"Using an SSH tunnel to connect to a database from within a C# tool is not difficult, unless the remote host uses Unix domain sockets.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to SSH Tunnel to AWS-external Databases (DevBlog #33) - Games:Tech:Blog\" \/>\n<meta property=\"og:description\" content=\"Using an SSH tunnel to connect to a database from within a C# tool is not difficult, unless the remote host uses Unix domain sockets.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\" \/>\n<meta property=\"og:site_name\" content=\"Games:Tech:Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-05T23:12:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-05T23:12:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png\" \/>\n\t<meta property=\"og:image:width\" content=\"829\" \/>\n\t<meta property=\"og:image:height\" content=\"464\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ingo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ingo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\"},\"author\":{\"name\":\"Ingo\",\"@id\":\"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9\"},\"headline\":\"How to SSH Tunnel to AWS-external Databases (DevBlog #33)\",\"datePublished\":\"2024-03-05T23:12:14+00:00\",\"dateModified\":\"2024-03-05T23:12:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\"},\"wordCount\":880,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9\"},\"image\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png\",\"keywords\":[\"AWS\",\"ChatGPT\",\"Database\",\"DevBlog\",\"DomainFactory\",\"MariaDB\",\"Network Traders\",\"RDS\",\"SSH\",\"Tunneling\",\"Unix Domain Socket\"],\"articleSection\":[\"DevBlog\",\"Game development\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\",\"url\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\",\"name\":\"How to SSH Tunnel to AWS-external Databases (DevBlog #33) - Games:Tech:Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png\",\"datePublished\":\"2024-03-05T23:12:14+00:00\",\"dateModified\":\"2024-03-05T23:12:15+00:00\",\"description\":\"Using an SSH tunnel to connect to a database from within a C# tool is not difficult, unless the remote host uses Unix domain sockets.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage\",\"url\":\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png\",\"contentUrl\":\"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png\",\"width\":829,\"height\":464,\"caption\":\"SSH Tunnels for DB Access\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.bellingo.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to SSH Tunnel to AWS-external Databases (DevBlog #33)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.bellingo.de\/blog\/#website\",\"url\":\"https:\/\/www.bellingo.de\/blog\/\",\"name\":\"Games:Tech:Blog\",\"description\":\"A Blog about Games, Technology in Games, and Technology in General\",\"publisher\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.bellingo.de\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9\",\"name\":\"Ingo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/93a4b9881ee1983f4fafc7e996ce82a42c3a1540c18f7417809c08a19658f167?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/93a4b9881ee1983f4fafc7e996ce82a42c3a1540c18f7417809c08a19658f167?s=96&d=mm&r=g\",\"caption\":\"Ingo\"},\"logo\":{\"@id\":\"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/www.bellingo.de\/blog\/author\/ingo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to SSH Tunnel to AWS-external Databases (DevBlog #33) - Games:Tech:Blog","description":"Using an SSH tunnel to connect to a database from within a C# tool is not difficult, unless the remote host uses Unix domain sockets.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/","og_locale":"de_DE","og_type":"article","og_title":"How to SSH Tunnel to AWS-external Databases (DevBlog #33) - Games:Tech:Blog","og_description":"Using an SSH tunnel to connect to a database from within a C# tool is not difficult, unless the remote host uses Unix domain sockets.","og_url":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/","og_site_name":"Games:Tech:Blog","article_published_time":"2024-03-05T23:12:14+00:00","article_modified_time":"2024-03-05T23:12:15+00:00","og_image":[{"width":829,"height":464,"url":"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png","type":"image\/png"}],"author":"Ingo","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Ingo","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#article","isPartOf":{"@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/"},"author":{"name":"Ingo","@id":"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9"},"headline":"How to SSH Tunnel to AWS-external Databases (DevBlog #33)","datePublished":"2024-03-05T23:12:14+00:00","dateModified":"2024-03-05T23:12:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/"},"wordCount":880,"commentCount":0,"publisher":{"@id":"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9"},"image":{"@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png","keywords":["AWS","ChatGPT","Database","DevBlog","DomainFactory","MariaDB","Network Traders","RDS","SSH","Tunneling","Unix Domain Socket"],"articleSection":["DevBlog","Game development"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/","url":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/","name":"How to SSH Tunnel to AWS-external Databases (DevBlog #33) - Games:Tech:Blog","isPartOf":{"@id":"https:\/\/www.bellingo.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage"},"image":{"@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png","datePublished":"2024-03-05T23:12:14+00:00","dateModified":"2024-03-05T23:12:15+00:00","description":"Using an SSH tunnel to connect to a database from within a C# tool is not difficult, unless the remote host uses Unix domain sockets.","breadcrumb":{"@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#primaryimage","url":"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png","contentUrl":"https:\/\/www.bellingo.de\/blog\/wp-content\/uploads\/2024\/03\/Beitragsbild-DB-Tunnel.png","width":829,"height":464,"caption":"SSH Tunnels for DB Access"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bellingo.de\/blog\/how-to-ssh-tunnel-to-aws-external-databases-devblog-33\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bellingo.de\/blog\/"},{"@type":"ListItem","position":2,"name":"How to SSH Tunnel to AWS-external Databases (DevBlog #33)"}]},{"@type":"WebSite","@id":"https:\/\/www.bellingo.de\/blog\/#website","url":"https:\/\/www.bellingo.de\/blog\/","name":"Games:Tech:Blog","description":"A Blog about Games, Technology in Games, and Technology in General","publisher":{"@id":"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bellingo.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/82498f8ac21d11f5948cab6d0a9807e9","name":"Ingo","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/93a4b9881ee1983f4fafc7e996ce82a42c3a1540c18f7417809c08a19658f167?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/93a4b9881ee1983f4fafc7e996ce82a42c3a1540c18f7417809c08a19658f167?s=96&d=mm&r=g","caption":"Ingo"},"logo":{"@id":"https:\/\/www.bellingo.de\/blog\/#\/schema\/person\/image\/"},"url":"https:\/\/www.bellingo.de\/blog\/author\/ingo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/posts\/1048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/comments?post=1048"}],"version-history":[{"count":8,"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/posts\/1048\/revisions"}],"predecessor-version":[{"id":1060,"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/posts\/1048\/revisions\/1060"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/media\/1052"}],"wp:attachment":[{"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/media?parent=1048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/categories?post=1048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bellingo.de\/blog\/wp-json\/wp\/v2\/tags?post=1048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}