Enabling or Disabling Password Authentication for NixOS Home Server: Adding SSH Keys for New Machines

Abstract: Resolve NixOS home server security risks by disabling password authentication and enforcing SSH key-based login for new machines.

Created: 2026-08-10 by
Disable password authentication on your NixOS home server by setting services.openssh.passwordAuthentication to false in your configuration. This forces all clients, including new machines, to use SSH key-based login, significantly enhancing security against brute-force attacks while streamlining access for authorized devices.

Why Switch to Key-Based Authentication?

Password authentication relies on something you know, which is susceptible to guessing, phishing, and credential stuffing attacks. Even strong passwords can be compromised if they are reused across services or intercepted via keyloggers. SSH key-based authentication utilizes asymmetric cryptography, relying on something you have (your private key). This method is exponentially more secure because the private key never leaves your local machine and cannot be guessed through dictionary attacks. For a home server that may be exposed to the internet, this single change drastically reduces the attack surface. It also eliminates the need to type complex passwords repeatedly, improving workflow efficiency when managing multiple systems.

Configuring NixOS for Key-Only Access

NixOS manages its entire system state through a declarative configuration file, typically located at /etc/nixos/configuration.nix. To enforce key-based authentication, you must modify the OpenSSH service settings within this file. The specific option controlling this behavior is services.openssh.passwordAuthentication. By default, this might be true or unset, allowing both methods. You need to explicitly set it to false. Additionally, ensure that public key authentication is enabled, which is usually the default but should be verified. Open your configuration file using a text editor such as nano or vim. Locate the services.openssh section. If it does not exist, create it. Add the following lines:
services.openssh.enable = true;
services.openssh.passwordAuthentication = false;
services.openssh.permitRootLogin = "prohibit-password";
The permitRootLogin setting is crucial. Setting it to "prohibit-password" allows root login only via keys, preventing password-based root access while still permitting administrative tasks if necessary. However, best practices suggest avoiding root login entirely and using a regular user with sudo privileges. After making these changes, rebuild your system configuration by running sudo nixos-rebuild switch. This command applies the new settings immediately. Do not close your current terminal session until you have verified that you can connect from another machine, as losing connectivity could lock you out.

Generating and Deploying SSH Keys

Before disabling passwords, every machine that needs access must have an SSH key pair generated and added to the server’s authorized users. Start on the client machine (the new computer you want to add). Generate a key pair using the ssh-keygen command. It is recommended to use Ed25519 keys for better performance and security compared to older RSA keys. Run the following command on the client:
ssh-keygen -t ed25519 -C "[email protected]"
Press Enter to accept the default location (~/.ssh/id_ed25519) and optionally set a passphrase for an extra layer of security. Once generated, copy the public key to the NixOS server. Use the ssh-copy-id utility, which handles the placement of the key into the correct directory automatically.
ssh-copy-id username@server_ip_address
If ssh-copy-id is unavailable, manually append the content of ~/.ssh/id_ed25519.pub to the ~/.ssh/authorized_keys file on the server. On NixOS, it is often cleaner to manage authorized keys declaratively in configuration.nix using users.users..openssh.authorizedKeys.keys, especially for headless servers where manual copying is error-prone. This approach ensures that key management survives reboots and configuration rebuilds without manual intervention.

Managing Multiple Machines and Security Risks

As you add more machines to your home server, managing keys becomes critical. Each client should have its own unique key pair. Never share private keys between devices. If a device is lost or compromised, revoke access by removing its corresponding public key from the server’s authorized keys list. This granular control is one of the primary advantages of key-based authentication. Be aware of the risks associated with disabling password authentication. If you lose your private key or forget the passphrase, and no backup mechanism is in place, you will be permanently locked out of the server. Always maintain a physical console access method, such as connecting a monitor and keyboard directly to the server, or using a remote management interface like IPMI or iLO. This serves as a fallback recovery path. Additionally, consider implementing fail2ban or similar intrusion prevention tools to block IPs that attempt excessive connection failures, even if they are using keys, to mitigate distributed denial-of-service attempts targeting your SSH port. For further reading on related SSH configurations, see SSH Servers: Can They Use Push Authentication for Login? and Troubleshooting SSH with Private Key.

Frequently Asked Questions

What happens if I disable password auth before adding my key?

You will be immediately locked out of the server if you do not already have a valid key configured. Always verify that your new key works from a separate terminal window before flipping the switch in your NixOS configuration.

Can I still use password authentication for SFTP?

No, disabling password authentication for SSH generally affects all subsystems relying on that authentication method, including SFTP. Ensure your SFTP clients are configured to use key-based authentication as well.

How do I recover access if I lose my SSH key?

Recovery requires physical access to the server. Boot into a live USB environment or use the GRUB menu to drop into a root shell, then edit the authorized_keys file or reset the root password via single-user mode if possible.

Is Ed25519 better than RSA for home servers?

Yes, Ed25519 keys are smaller, faster to generate, and less prone to implementation errors than RSA. They provide equivalent or better security with much shorter key lengths, making them ideal for modern SSH setups.

Should I allow root login via SSH keys?

It is safer to disable direct root login entirely and use a standard user account with sudo privileges. This provides an audit trail of individual actions and prevents attackers from targeting the root account directly, even with key-based access.

Latest News

How to Display Output of xterm Command in Terminal Screen using Cron

Resolve the inability to display xterm output in a terminal screen from cron by redirecting logs or using wall instead of insecure X11 workarounds.

Read More
Expose Local Server on VPS Preserving Real Client IPs (OS Level)

Resolve VPS logging showing only gateway IPs by configuring reverse proxies to forward real client addresses via X-Forwarded-For headers.

Read More
How to Clear Recent Files History in Linux without Deleting Actual Files?

Clear recent files history in Linux by deleting ~/.local/share/recently-used.xbel without removing the actual files.

Read More
Best HDD Copy Strategy: Manually Syncing and Rewriting Scratch

Resolve data drift between two 4TB hard drives by using rsync with the --delete flag to manually sync and rewrite scratch data for an exact mirror.

Read More
Understanding Bash Prompt Abbreviations: An Overview

Resolve repetitive typing errors by creating and persisting Bash aliases in the .bashrc file for improved command-line efficiency.

Read More
Free Tools and Methods to Log Real-Time Performance Details in Task Manager

Log real-time CPU and memory metrics to CSV files using Windows Performance Monitor Data Collector Sets to troubleshoot system slowness.

Read More
Contact Qatar Airways Customer Service: Phone Number, Help Center, and More

Resolve urgent Qatar Airways reservation issues like flight changes and baggage claims using the US phone number +1801-855-5905 or online self-service tools.

Read More
Windows 11: Alt Codes Displaying Wrong Characters - Solutions

Resolve Windows 11 Alt codes showing wrong characters by verifying the US keyboard layout and enabling Num Lock.

Read More
Run Programs with Elevated Privileges: A Comprehensive Guide

Eliminates the need to type sudo for frequent administrative tasks by configuring .bashrc aliases or functions.

Read More
Dynamically Changing Dates in Excel Formulas Using Cells

Eliminate manual date updates in Excel by using cell references to create dynamic formulas that automatically adjust calculations when input dates change.

Read More
Granting Edit Access to a Specific Excel Sheet in an Office 365 User Email ID-Based Login

Excel Online lacks native sheet-level permissions, so users must split workbooks or use worksheet protection to isolate edit access for specific tabs.

Read More
Creating Network Load on Local Wi-Fi from One PC

Generate sustained Wi-Fi bandwidth load from a single PC using a VM SFTP server to test router stability and throughput.

Read More
Changing the Default Editor for Batch Files in Windows 11's File Explorer

Resolve the issue of batch files opening in Notepad by changing the default editor to a preferred application like VS Code.

Read More
Gain WiFi Connection Minutes Before Losing it by Changing MAC Address

Bypass MAC address filtering to restore WiFi connectivity temporarily when a device is blocked by network administrators.

Read More
Photos Folders Turned Black: Troubleshooting Picture Applications on Windows

Resolve black screens in Windows Photos by resetting the app, updating graphics drivers, and repairing system files.

Read More
Troubleshooting High CPU Temperature Values: A Step-by-Step Guide

Resolve high CPU temperatures and thermal throttling by monitoring with Speedfan, cleaning dust from cooling components, and replacing degraded thermal paste.

Read More
Make cURL establish TLS connection with CA unknown

Resolve cURL TLS connection failures with unknown or self-signed certificates by using the --insecure flag to bypass CA validation.

Read More
Troubleshooting Incorrect Network Metrics Values in Grafana, Prometheus, InfluxDB, and Telegraf

Fix incorrect network metrics in Grafana, Prometheus, InfluxDB, and Telegraf by verifying interface selection, resolving unit mismatches, and handling counter resets.

Read More
Start Another Terminal Window (cmd.exe) Windows Repair/Troubleshoot

Provides step-by-step instructions to access the Windows Command Prompt via bootable media for advanced system repair and troubleshooting.

Read More
Thinkpad P1 Gen 6: Sudden Thunderbolt 3 Dock USB-C Charging Stopped Working

Resolve sudden Thunderbolt 3 dock USB-C charging and internet failure on ThinkPad P1 Gen 6 by updating firmware, resetting the dock, and adjusting power settings.

Read More
ASUS Windows 11 Laptop: Internet Connection Issue with Hotspot

Resolve ASUS Windows 11 laptop spinning wheel issue when connecting to mobile hotspot by resetting network stack, disabling IPv6, and adjusting power settings.

Read More
Developing iOS Project with Firebase: Logging in and Sending Push Notifications

Integrates Firebase to enable secure user authentication and push notifications in iOS applications.

Read More
Troubleshooting Bash Script with Suspected Issues of Spaces, Dashes, Filenames and Quoting

Resolve Bash script failures caused by word splitting, globbing, and special characters in filenames by applying proper quoting techniques.

Read More
Populating OneDrive Folder for Local Backup without Affecting Remote Files

Prevent OneDrive from deleting remote files during Windows reinstallation by unlinking the account or using symbolic links to isolate local data.

Read More
Force First Frame as Keyframe Without Re-encoding: A Quick Solution

Resolve inaccurate seeking and playback glitches by re-encoding video to ensure the first frame is a valid keyframe.

Read More
Find Information in Database Using WSL (Ubuntu) on Windows-10

Resolve database connection issues from WSL Ubuntu on Windows 10 by configuring client tools and network access to query remote or local servers.

Read More
Configuring a New Router with Different Networks: One Family, One Guest

Resolve IP conflicts and isolate guest traffic by configuring a second router with a distinct subnet via its WAN port.

Read More
Quickly Open Multiple Stock Websites with a Single Command

Solve the problem of manually opening multiple stock research websites by creating a single command to launch them simultaneously on Windows, macOS, or Linux.

Read More
Improved Adobe Acrobat Search Experience: Access Advanced Search with Ease

Access advanced search filters like case sensitivity and regex in Adobe Acrobat by clicking More Options in the Find bar.

Read More
Port Forwarding VM via OpenVPN: A Comprehensive Guide

Configure OpenVPN server and iptables to forward specific ports from VPN clients to a virtual machine's internal IP address.

Read More
Understanding Partitions in the 1980s: A Look Back at MS-DOS and Master Boot Record

Explains how the Master Boot Record and partition table enabled MS-DOS to manage multiple disk volumes on a single physical drive.

Read More
Windows 10 Enterprise: Keyboard Not Detected in Managed Organization with Admin Privileges

Resolve Windows 10 Enterprise keyboard detection failures caused by Group Policy restrictions, driver corruption, or USB enumeration errors.

Read More
Can't Find x86_64 Versions of Applications on MacOS arm64 (M1)

Resolve missing x86_64 app issues on M1 Macs by installing Rosetta 2 and reinstalling apps as universal binaries.

Read More
How to Hide Installation Source for an Android App

Manage Android app installation source visibility by using USB transfers or file managers to reduce browser traces and isolate data via work profiles.

Read More
Connecting Momentus 4200.2 ST9808210A Hard Drive via USB Cable

Resolve inability to access Seagate Momentus 4200.2 ST9808210A hard drive by connecting it via USB using a compatible SATA-to-USB adapter and configuring the disk in Windows.

Read More