<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Malavika Rajesh</title>
    <description>The latest articles on DEV Community by Malavika Rajesh (@malavika__).</description>
    <link>https://dev.to/malavika__</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4061917%2F1f67dab1-b833-4bec-a358-d27c709ceea1.png</url>
      <title>DEV Community: Malavika Rajesh</title>
      <link>https://dev.to/malavika__</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malavika__"/>
    <language>en</language>
    <item>
      <title>Stop Exposing SSH to the Internet: A Better Way to Access Private Servers</title>
      <dc:creator>Malavika Rajesh</dc:creator>
      <pubDate>Tue, 04 Aug 2026 09:20:01 +0000</pubDate>
      <link>https://dev.to/malavika__/stop-exposing-ssh-to-the-internet-a-better-way-to-access-private-servers-2bfm</link>
      <guid>https://dev.to/malavika__/stop-exposing-ssh-to-the-internet-a-better-way-to-access-private-servers-2bfm</guid>
      <description>&lt;p&gt;SSH is one of those tools that are used automatically by the developers.&lt;/p&gt;

&lt;p&gt;Want to see what's going on with the server?&lt;/p&gt;

&lt;p&gt;ssh user@server&lt;/p&gt;

&lt;p&gt;Easy.&lt;/p&gt;

&lt;p&gt;However, public SSH access usually requires exposing port 22 to the web, setting up firewalls, limiting IP addresses, or adding a bastion host before the internal network.&lt;/p&gt;

&lt;p&gt;It will work, but as you add more infrastructure, it will become harder to manage your remote access.&lt;/p&gt;

&lt;p&gt;There is an alternative, however – to keep the servers private and limit their access with a Zero Trust network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Public SSH Access May Be an Issue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Publicly accessible SSH server is always exposed to the internet.&lt;/p&gt;

&lt;p&gt;Although authentication is done properly, there is always a need to think about firewalls, credentials, authorized users, IP address restrictions, and monitoring.&lt;/p&gt;

&lt;p&gt;One of the solutions to reduce the exposure is to allow SSH access from a specific set of IP addresses.&lt;/p&gt;

&lt;p&gt;However, it will not be convenient for remote developers.&lt;br&gt;
Bastion Host could also be considered another popular choice:&lt;/p&gt;

&lt;p&gt;Developer&lt;br&gt;
    ↓&lt;br&gt;
Bastion Host&lt;br&gt;
    ↓&lt;br&gt;
Private Server&lt;/p&gt;

&lt;p&gt;Here we decrease exposure of the internal servers, however, the bastion becomes another infrastructure component that needs to be protected and maintained.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But What If There Was No Need for SSH on the Server from the Outside?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of exposing SSH externally, let us picture the developer and the server communicating via a private encrypted channel.&lt;/p&gt;

&lt;p&gt;Developer Laptop&lt;br&gt;
       ↓&lt;br&gt;
Private Encrypted Channel&lt;br&gt;
       ↓&lt;br&gt;
Production Server&lt;/p&gt;

&lt;p&gt;We have no need to expose SSH while the server remains behind its firewall, and devices access the server via a private encrypted channel.&lt;/p&gt;

&lt;p&gt;It is at this point when solutions like Zero Trust Network Access start getting interesting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.quickztna.com/" rel="noopener noreferrer"&gt;QuickZTNA&lt;/a&gt; works by connecting devices and infrastructure via WireGuard-based private mesh while applying Zero Trust security controls to access.&lt;/p&gt;

&lt;p&gt;And the whole point is not to provide yet another tunnel but to control what and who accesses what.&lt;br&gt;
**&lt;br&gt;
Being Connected Does Not Necessarily Mean Having Access to Everything**&lt;/p&gt;

&lt;p&gt;If five developers are connected to the company's internal infrastructure.&lt;/p&gt;

&lt;p&gt;It does not necessarily mean that all of them are automatically granted SSH access to every single server.&lt;/p&gt;

&lt;p&gt;First developer requires access to the staging environment.&lt;/p&gt;

&lt;p&gt;Second developer requires access to the production environment.&lt;/p&gt;

&lt;p&gt;Contractor requires a dev environment only.&lt;/p&gt;

&lt;p&gt;Zero Trust approach may provide more accurate permissions.&lt;/p&gt;

&lt;p&gt;For instance:&lt;/p&gt;

&lt;p&gt;Developer + Approved Device + SSH + Production = Allow&lt;/p&gt;

&lt;p&gt;Contractor + SSH + Production = Deny&lt;/p&gt;

&lt;p&gt;Access policies implemented by &lt;a href="https://www.quickztna.com/guide/admin/access-policies/" rel="noopener noreferrer"&gt;QuickZTNA Zero Trust&lt;/a&gt; follow the principle of least privileges: users are granted the access they really need instead of the access to the entire network.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What About the Setup?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Security upgrades are quite useless if their implementation requires one person full-time job.&lt;br&gt;
For small teams of engineers, maintaining such things as VPN gateways, bastion hosts, firewall configurations, and networking could lead to unnecessary complexity.&lt;/p&gt;

&lt;p&gt;One way to simplify is by connecting authorized devices directly to the managed private network.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.quickztna.com/guide/quickstart/" rel="noopener noreferrer"&gt;QuickZTNA Quickstart &lt;/a&gt;demonstrates how the administrator can generate an authentication key, install the client and connect the device without manually exchanging WireGuard keys or configuring inbound firewall ports.&lt;/p&gt;

&lt;p&gt;It would be especially helpful for small DevOps teams that need to have access to their private infrastructure without maintaining any additional gateway infrastructure.&lt;br&gt;
**&lt;br&gt;
Conclusion**&lt;/p&gt;

&lt;p&gt;SSH isn’t the problem itself.&lt;/p&gt;

&lt;p&gt;The real question here is how to make SSH reachable.&lt;/p&gt;

&lt;p&gt;Ports, IP allowlists, and bastions could help to solve certain aspects of remote access problems.&lt;/p&gt;

&lt;p&gt;Zero Trust networking provides an alternative approach: keep your infrastructure private, identify who and what is asking for access, and provide access to required resources only.&lt;/p&gt;

&lt;p&gt;From the point of view of developers, this changes the question:&lt;/p&gt;

&lt;p&gt;“How do I expose this server safely?”&lt;/p&gt;

&lt;p&gt;to&lt;/p&gt;

&lt;p&gt;“Do I really need to expose this server?”&lt;/p&gt;

</description>
      <category>infrastructure</category>
      <category>networking</category>
      <category>security</category>
    </item>
  </channel>
</rss>
