Implementing Open-Source PAM with JumpServer for Proxmox and MicroK8s

Learn how to design an open-source PAM architecture with JumpServer to secure and audit privileged access to Proxmox, Linux, MicroK8s, and databases.

This post is also available in: Spanish

Managing a homelab often starts simply: a few virtual machines, SSH keys, perhaps a Kubernetes cluster, and a VPN to reach everything remotely.

Then the environment grows.

In my case, my lab infrastructure includes multiple systems running on Proxmox and MicroK8s clusters. As the number of servers, services, databases, and Kubernetes workloads increases, managing privileged access using only SSH keys and administrator accounts becomes increasingly difficult to control and audit.

This raises an important question:

How can I control, centralize, and audit privileged access to my lab infrastructure without deploying an expensive enterprise PAM solution?

The answer I decided to explore is Privileged Access Management (PAM) using open-source software.

In this article, I will explain the problem I want to solve, what PAM provides, the open-source alternatives I considered—including Teleport—and why I decided to start my implementation with JumpServer.

The goal is not simply to install another application. The goal is to build a centralized access layer for my Proxmox, Linux, Kubernetes, and eventually database infrastructure.


What Is Privileged Access Management?

Privileged Access Management, commonly called PAM, is a security approach used to control and monitor access to sensitive infrastructure.

Privileged accounts can include:

  • Linux root accounts

  • sudo-enabled users

  • Proxmox administrators

  • Kubernetes administrators

  • Database administrators

  • Network device administrators

  • Service and automation accounts

Without PAM, administrators often access infrastructure directly:

Administrator
|
| SSH
v
Linux Server

Or:

Administrator
|
| kubeconfig
v
Kubernetes API

This model works, but as infrastructure grows it creates several problems.

SSH keys can become distributed across multiple systems. Kubernetes credentials may exist on administrator laptops. Shared privileged accounts can make auditing difficult. Former users may retain credentials longer than expected.

There is also a fundamental auditing problem:

Knowing that someone authenticated is not the same as knowing what they did after authentication.

A PAM platform introduces a controlled access layer between users and infrastructure.

+------------------+
| Administrator |
+---------+--------+
|
MFA / SSO
|
v
+------------------+
| PAM Platform |
| JumpServer |
+------------------+
/ | \
/ | \
v v v
Linux/VMs Kubernetes Databases
SSH MicroK8s MySQL/etc.

Instead of allowing administrators to connect directly to every system, access can be routed through the PAM platform.

That gives us a central place for authentication, authorization, session auditing, and access policies.


Why PAM in a Homelab?

At first, implementing PAM in a homelab may sound excessive.

But a serious homelab can reproduce many of the same access-management problems found in production environments.

My environment contains Proxmox virtualization infrastructure and multiple MicroK8s systems used for testing DevOps, SRE, database, Kubernetes, and infrastructure automation technologies.

That makes it an ideal environment for experimenting with security practices such as:

  • Zero Trust access

  • Role-Based Access Control

  • Multi-Factor Authentication

  • privileged session auditing

  • credential management

  • least privilege

  • Just-In-Time access

  • centralized infrastructure access

It also solves a practical problem.

I don't want access to my infrastructure to depend on a collection of SSH private keys distributed across different machines.

I want something closer to:

Identity
|
v
Authentication + MFA
|
v
Authorization Policy
|
v
PAM Gateway
|
+------> Proxmox hosts
|
+------> Linux VMs
|
+------> MicroK8s
|
+------> Databases
|
+------> Network devices

Every privileged connection should ideally have an identity, authorization decision, timestamp, target, and audit trail associated with it.


The Requirements for My PAM Lab

Before choosing a platform, I defined several requirements.

The solution should preferably be:

Open source

This is a lab environment, so I want something I can deploy, inspect, modify, destroy, and rebuild without depending on expensive licensing.

Self-hosted

The PAM control plane should run inside infrastructure I control.

SSH capable

Most of my Linux infrastructure is administered through SSH.

Kubernetes capable

MicroK8s is an important part of my lab, so Kubernetes access is a major requirement.

Database friendly

I also want the architecture to eventually cover privileged database access.

Auditable

Being able to determine who accessed a server and what happened during that session is one of the primary reasons for implementing PAM.

MFA capable

A compromised password should not automatically provide privileged infrastructure access.

RBAC capable

Users should only see and access infrastructure they are authorized to manage.

Automation friendly

As a DevOps/SRE environment, the platform should not prevent future Infrastructure as Code and automation integrations.


Why Not Just Use a Bastion Host?

A traditional SSH bastion is already a major security improvement.

For example:

Internet / VPN
|
v
+-------------+
| SSH Bastion |
+------+------+
|
+---+---+
| |
v v
Server A Server B

Firewall rules can restrict SSH so that infrastructure accepts management connections only from the bastion.

However, a bastion alone is not necessarily a complete PAM system.

We still need to answer questions such as:

  • Who can access each server?

  • Which privileged account can they use?

  • Can access automatically expire?

  • Is MFA required?

  • Can sessions be recorded?

  • Can commands be audited?

  • Who changed a privileged credential?

  • Can access require approval?

  • Can Kubernetes and databases use the same access model?

This is where a PAM platform becomes significantly more interesting.


Open-Source Alternatives to Teleport

Teleport is probably one of the first platforms DevOps engineers encounter when researching modern infrastructure access.

Its certificate-based architecture and strong SSH and Kubernetes integration make it particularly attractive for cloud-native environments.

But I wanted to explore alternatives that could provide a strong self-hosted experience while giving me broader PAM capabilities.

The projects worth evaluating include:

JumpServer

JumpServer is an open-source Privileged Access Management platform designed around four major areas:

  • Authentication

  • Authorization

  • Account management

  • Auditing

It supports several infrastructure protocols and asset types, including:

  • SSH

  • RDP

  • VNC

  • Kubernetes

  • MySQL

  • PostgreSQL

  • SQL Server

  • Oracle

  • Redis

  • MongoDB

  • network devices

  • web applications

For my environment, the combination of SSH + Kubernetes + databases + session auditing makes JumpServer particularly interesting.

The Community Edition is self-hosted and GPL-3.0 licensed.


Teleport

Teleport approaches the problem from a slightly different direction.

It is particularly strong as an identity-aware infrastructure access platform based around short-lived certificates.

Its architecture works extremely well with:

  • SSH

  • Kubernetes

  • databases

  • web applications

  • cloud-native infrastructure

For organizations heavily focused on Kubernetes and ephemeral identity-based access, Teleport remains a very compelling platform.

For this lab, however, I want to experiment with something closer to a broader traditional PAM model that also includes credential management and heterogeneous infrastructure.


Warpgate

Warpgate is another interesting open-source project.

It acts as a smart bastion host and focuses on providing controlled access without requiring agents on every target server.

Its lightweight architecture makes it particularly attractive for homelabs and smaller infrastructure environments.

Warpgate is worth investigating when the main objective is to replace a traditional bastion with something offering stronger authentication and auditing without deploying a larger PAM ecosystem.


Bastillion

Bastillion is a web-based SSH console and bastion solution.

It centralizes SSH access and SSH key management and can be useful when the primary requirement is controlling Linux server access.

Its scope is narrower than platforms such as JumpServer or Teleport, but that simplicity can also be an advantage for environments focused almost entirely on SSH.


HashiCorp Boundary

Boundary approaches privileged access through identity-based infrastructure connectivity.

Rather than distributing credentials and exposing infrastructure endpoints directly, Boundary brokers authorized connections to infrastructure.

Its architecture is particularly interesting for dynamic cloud environments.

However, its philosophy is closer to secure infrastructure connectivity than to a traditional all-in-one PAM platform.


JumpServer vs Teleport for This Lab

The choice is less about which product is universally better and more about which architecture I want to experiment with.

Capability

JumpServer

Teleport

SSH access

Yes

Yes

Kubernetes access

Yes

Yes

Database access

Yes

Yes

Session auditing

Yes

Yes

MFA

Yes

Yes

RBAC

Yes

Yes

Credential vaulting

Strong focus

Certificate-focused model

RDP/VNC

Strong support

More limited use case

Traditional PAM model

Strong

Less traditional

Cloud-native access

Good

Excellent

Self-hosted option

Yes

Yes

Homelab suitability

Excellent

Excellent

Teleport would be a natural choice if my primary goal were certificate-based SSH and Kubernetes access.

JumpServer becomes especially interesting because I want to experiment with PAM itself, including privileged accounts, credential management, session recording, infrastructure assets, and centralized auditing.

For that reason, JumpServer will be the first platform I implement in this lab.


Proposed PAM Architecture

My current lab is based around Proxmox.

Instead of installing JumpServer directly inside Kubernetes, I plan to initially keep the PAM control plane separate from the infrastructure it protects.

Conceptually:

USERS
|
HTTPS / SSH
|
v
+----------------------+
| JumpServer |
| |
| Authentication + MFA |
| RBAC / ACL |
| Credential Mgmt |
| Session Audit |
+----------+-----------+
|
Management Network
|
+-------------------+-------------------+
| | |
v v v
+-------------+ +-------------+ +-------------+
| Proxmox | | Linux VMs | | Databases |
| Hosts | | / Services | | MySQL/etc. |
+-------------+ +-------------+ +-------------+
|
v
+------------------+
| MicroK8s Cluster |
+------------------+
| | |
Node1 Node2 Node3

JumpServer itself can run inside a dedicated VM or isolated service environment.

This creates an important separation:

The PAM system should not depend entirely on the infrastructure it is supposed to provide emergency access to.

For example, putting the only PAM instance inside the Kubernetes cluster it manages could create a circular dependency during a cluster outage.

For the first iteration, a dedicated Proxmox VM therefore makes more sense.


Network Segmentation

PAM becomes much more valuable when combined with network controls.

Instead of:

Laptop ----------SSH----------> Server

the target architecture becomes:

Laptop
|
| HTTPS / SSH
v
JumpServer
|
| SSH
v
Server

Firewall rules can then progressively enforce:

Administrator VLAN
|
+------> JumpServer
|
+------> Management VLAN
|
+--> Proxmox
+--> Linux
+--> MicroK8s
+--> Databases

Eventually, direct administrative SSH access to managed systems can be blocked.

Only JumpServer—or a controlled emergency access path—should be capable of reaching management interfaces.

This turns PAM from merely another login portal into an actual security boundary.


A Critical Requirement: Break-Glass Access

There is one important exception.

A PAM platform must not become a single point of operational failure.

If JumpServer fails, I still need a carefully controlled method to recover the infrastructure.

That means maintaining a break-glass access mechanism.

For example:

Normal Access
Admin
|
JumpServer
|
Infrastructure
Emergency Access
Authorized Admin
|
VPN / Restricted Management Network
|
Emergency Credential
|
Infrastructure

Break-glass credentials should be heavily protected, rarely used, and monitored.

The objective isn't to eliminate emergency administrative access.

The objective is to ensure that it remains an exception rather than the normal way infrastructure is managed.


Integrating MicroK8s

Kubernetes access is particularly interesting because traditional kubeconfig files can effectively become privileged credentials.

An administrator may currently have:

~/.kube/config

containing credentials capable of managing an entire cluster.

From a security perspective, that means the administrator's workstation becomes part of the privileged access boundary.

A PAM architecture can improve this model.

Instead of distributing long-lived administrative credentials, access can be centralized and associated with individual identities.

For my MicroK8s environment, I want to test:

  1. registering the Kubernetes clusters in JumpServer;

  2. mapping users and permissions;

  3. limiting access to specific clusters;

  4. testing kubectl workflows;

  5. auditing Kubernetes sessions;

  6. testing least-privilege access;

  7. removing unnecessary administrative kubeconfig files from endpoints.

This will be one of the most important parts of the lab.


Integrating Proxmox

Proxmox creates another interesting PAM scenario.

There are actually two different privileged access surfaces.

The first is the Proxmox web/API layer.

The second is the underlying Debian/Linux operating system of each Proxmox node.

For the initial implementation, JumpServer can protect SSH access to the Proxmox hosts.

Later, I want to evaluate how the architecture can incorporate Proxmox authentication and API access without creating unnecessary dependencies.

The desired model is:

Administrator
|
v
Identity / MFA
|
v
JumpServer
|
v
Proxmox Management Access

rather than distributing root SSH credentials across administrator machines.


Databases Are Next

Another reason I selected JumpServer for the first experiment is database access.

Database administrators frequently require privileged accounts such as:

root
postgres
admin
dba

Directly distributing these credentials makes accountability difficult.

Eventually, I want my lab to follow the same principle:

Engineer
|
v
PAM
|
+----> MySQL
+----> PostgreSQL
+----> Redis

This will be particularly useful when experimenting with Database Reliability Engineering practices.


What I Want to Achieve

The final architecture should allow me to answer questions that are surprisingly difficult in many environments:

Who accessed this server?

When did they access it?

Which privileged account did they use?

What commands were executed?

Who accessed the Kubernetes cluster?

Which database was accessed?

Can I revoke one person's access without rotating credentials across every server?

Can I require MFA before privileged infrastructure access?

If the platform can reliably answer those questions, then the PAM implementation is providing real value.


Implementation Roadmap

I plan to build the lab incrementally.

Phase 1 — Deploy JumpServer

Create a dedicated VM in Proxmox and deploy the JumpServer Community Edition.

Validate:

  • HTTPS

  • administrative access

  • backups

  • persistent storage

  • MFA

Phase 2 — Linux Asset Management

Register Linux virtual machines and Proxmox nodes.

Configure users, privileged accounts, asset groups, RBAC, and SSH access.

Phase 3 — Audit

Enable and test:

  • session recording

  • command auditing

  • authentication logs

  • file-transfer auditing

Then intentionally perform several administrative operations and verify what information is recorded.

Phase 4 — MicroK8s

Register the MicroK8s clusters and test controlled Kubernetes access.

The objective will be to reduce the need for long-lived administrator kubeconfigs.

Phase 5 — Database Access

Add MySQL, PostgreSQL, and Redis lab environments and experiment with privileged database access.

Phase 6 — Network Enforcement

Once PAM access works reliably, progressively modify firewall policies so that privileged management interfaces can primarily be reached through JumpServer.

Phase 7 — Break-Glass Procedure

Document and test emergency access.

A recovery mechanism that has never been tested isn't really a recovery mechanism.


PAM Is More Than Installing JumpServer

One lesson is already clear before deploying anything:

Installing a PAM product does not automatically create a PAM architecture.

The software is only one component.

A proper implementation also requires:

Identity
+
MFA
+
RBAC
+
Credential Management
+
Network Segmentation
+
Session Auditing
+
Logging
+
Break-Glass Access
+
Operational Procedures

Without those controls, JumpServer would simply become a sophisticated jump box.

The real objective is to make privileged access intentional, identifiable, limited, auditable, and revocable.


Conclusion

As homelabs evolve into serious infrastructure environments, security architecture should evolve with them.

My Proxmox and MicroK8s environment has reached the point where managing access entirely through SSH keys, kubeconfig files, and privileged accounts is no longer the model I want to use.

Implementing PAM provides an opportunity to improve that architecture while experimenting with security patterns used in enterprise environments.

After evaluating several open-source approaches, I decided to start with JumpServer because it combines traditional PAM capabilities with support for the infrastructure I care about most: Linux, Kubernetes, databases, and heterogeneous systems.

The next step is where things become more interesting.

In the next article, I will build the JumpServer VM in Proxmox, deploy the Community Edition, configure HTTPS and MFA, and onboard the first Linux servers.

From there, we will progressively move toward a PAM-controlled Proxmox and MicroK8s environment.

The goal isn't simply to build a jump server.

The goal is to build a privileged access architecture.

Comments