This episode covers Proxmox node hardening: SSH key only authentication, changing the SSH port, valid TLS certificates for the web UI, restricting access to a management VLAN, and unattended-upgrades for automatic security patches.

Episode 14 secured user access. Episode 15 secures the node itself: the SSH entry points, the web UI, and the update mechanism. These are the defense layers attackers test most often — and that administrators ignore most often.
We'll disable password login for root, change the SSH port, replace the self-signed certificate with a valid TLS one, restrict web UI access to a management VLAN, and then automate security updates. By the end of the episode, your node will be far harder to break into.
The first step is to disable password-based login for root. Passwords can be guessed or brute-forced; SSH keys are nearly impossible to guess. Create a key on your work machine, then copy it to the node:
ssh-copy-id root@192.168.1.10Once the key is installed, verify that key login works, then disable password login in /etc/ssh/sshd_config:
PermitRootLogin prohibit-password
PasswordAuthentication noThe sshd -t command validates the configuration before the reload, and systemctl reload ssh applies it. Don't close the existing session until you've confirmed key login works.
Changing the SSH port from 22 to something else reduces the noise from automated attacks targeting the default port. Edit the Port 22 line to a new port, for example 2222:
Port 2222Don't forget to open the new port in the firewall and close the old one. Also remember to update your SSH client with the -p 2222 flag.
The strongest step: restrict SSH to only specific IPs. Use a firewall rule or hosts.allow so only the management network can access the SSH port.
The default Proxmox web UI uses a self-signed certificate — the browser always warns, and the connection can't be verified. Replace it with a valid certificate from Let's Encrypt or an internal CA.
Obtain the certificate -> upload to /etc/pve/local -> select it in the UI -> reload pveproxyFor Let's Encrypt, you need a domain and DNS or HTTP challenge. Once the certificate is installed, systemctl reload pveproxy makes the web UI serve connections the browser trusts.
A certificate is useless if the web UI is open to the whole world. Restrict port 8006 access to only your management VLAN. Use the Proxmox node firewall or an external firewall to deny access from other networks.
Allow : 10.0.0.0/8 (management VLAN) to port 8006
Deny : all other addressesThe combination of a valid certificate plus network restriction makes the web UI accessible only from where it's supposed to be.
Debian provides unattended-upgrades to install security patches automatically. Proxmox enables it for the enterprise repository; you need to add the pve-no-subscription repository:
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgradesConfigure the security update sources in /etc/apt/apt.conf.d/50unattended-upgrades, making sure the pve-no-subscription line isn't commented out. Debian and Proxmox security patches will be installed automatically.
Check whether automatic updates are running:
unattended-upgrade --dry-runThe unattended-upgrade --dry-run command simulates the process and shows the packages that would be updated. Check the /var/log/unattended-upgrades/ log occasionally to make sure there are no failures.
Warning
Automatic updates are useful, but for critical components like the kernel, schedule a dedicated maintenance window. Test updates in a staging environment first if your infrastructure supports it.
After all the changes, make sure no gaps were missed:
sshd -T | grep -E "permitrootlogin|passwordauthentication|port"The output should show permitrootlogin prohibit-password, passwordauthentication no, and the changed port.
Review the list of ports actually listening on the node:
ss -tlnpThe ss -tlnp command shows all listening ports along with their processes. Compare them with the ports actually needed: 8006 for the web UI, the new SSH port, and the Corosync and Ceph ports if you use a cluster.
Episode 15 strengthened the node's defenses: disabling SSH password login and using keys only, changing the SSH port, restricting access IPs, installing valid TLS certificates for the web UI, restricting access to the management VLAN, and automating security updates.
The key takeaways:
sshd -t and unattended-upgrade --dry-run.In the next episode, episode 16, we will cover GPU passthrough and nested virtualization — giving VMs direct access to physical devices through IOMMU, bypassing the host driver for NVIDIA and AMD GPUs, and enabling virtualization inside a VM. Your node is hardened; now it's time to maximize the hardware!