/etc/ssh/sshd_config for new rules like port numbers or authentication methods to take effect immediately. Without a restart, the server continues using old parameters until the next boot or manual reload.
Understanding Service State vs. Configuration Files
The distinction between a service restart and a config change is fundamental to system administration. The configuration file, typically located at /etc/ssh/sshd_config, serves as the blueprint for how the Secure Shell daemon should behave. This file contains directives such as Port, PermitRootLogin, and PasswordAuthentication. When you edit this file, you are only altering the static data stored on your hard drive. The operating system does not automatically read these changes into memory during runtime.
In contrast, the SSH daemon (sshd) is a background process that runs in the system's memory. It reads its configuration only when it starts up or receives a specific signal to reload. Therefore, any modifications made to the configuration file remain dormant until the service is instructed to re-read them. A restart forces the daemon to terminate the current process and start a new one, which then loads the updated configuration from disk. This ensures that all new security policies and network bindings are active immediately.
When to Edit the Configuration File
You should edit the configuration file whenever you need to make permanent changes to the SSH server's behavior. Common scenarios include changing the default listening port from 22 to a non-standard number, disabling root login for security compliance, or enabling key-based authentication exclusively. These changes affect how the server operates globally and persist across reboots. However, simply saving the file does not activate these changes. You must verify the syntax of your edits before proceeding to apply them.
It is crucial to test your configuration file for syntax errors before restarting the service. A malformed configuration can prevent the SSH daemon from starting, leaving you locked out of the remote server if you are connected via SSH. Always use the diagnostic command provided by your distribution to validate the file structure. This step prevents accidental downtime caused by typos or incorrect directive usage.
Applying Changes: Restart vs. Reload
Once you have verified your configuration changes, you need to apply them to the running system. There are two primary methods: restarting the service and reloading the configuration. A full restart stops the SSH daemon completely and starts it again. This method is necessary when you change critical parameters like the listening port or the protocol version. If you change the port and do not restart, clients attempting to connect to the new port will fail because the old process is still bound to the old port.
A reload, often achieved by sending a HUP signal or using the systemctl reload command, tells the daemon to re-read its configuration without stopping existing connections. This is useful for changing logging levels or other non-disruptive settings. However, not all configuration directives support a live reload. For example, changes to ListenAddress or Protocol require a full restart. Understanding the difference ensures you choose the correct action to minimize disruption to active users.
Executing the Commands
To restart the SSH service on most modern Linux distributions using systemd, run the following command:
sudo systemctl restart sshd
This command stops the current service and starts a new instance with the updated configuration. To check the status and ensure the service started correctly, use:
sudo systemctl status sshd
If you prefer to reload the configuration without dropping active sessions, you can use:
sudo systemctl reload sshd
Always ensure you have an alternative way to access the server, such as a physical console or IPMI, before making significant changes to the SSH configuration.
Best Practices for Security and Stability
Security best practices dictate that you should always backup your configuration file before making changes. Create a copy of /etc/ssh/sshd_config to a safe location so you can restore it if something goes wrong. Additionally, test your changes in a staging environment if possible. This allows you to verify that the new configuration does not introduce vulnerabilities or connectivity issues.
Another important practice is to monitor the system logs after applying changes. Use journalctl -u sshd to view recent logs and identify any errors related to the service restart. If the service fails to start, the logs will provide detailed information about what went wrong, such as invalid options or permission issues. This diagnostic capability is essential for troubleshooting unexpected behavior.
For more details on different ways to manage the SSHD service, including differences between program restarts and application-level controls, refer to our guide on SSHD Restart Methods. Understanding these nuances helps in selecting the right approach for your specific infrastructure needs.
Frequently Asked Questions
What happens if I forget to restart sshd after editing the config?
The server will continue to operate using the old configuration settings until a restart or reload occurs. New rules defined in the file will be ignored, potentially leaving security gaps or preventing intended functionality from working. You must explicitly apply the changes to the running process.
Can I change the SSH port without restarting the service?
No, changing the listening port requires a full restart of the SSH daemon. The old process remains bound to the original port, and a new process is needed to bind to the new port. Attempting to connect to the new port without a restart will result in connection timeouts.
How do I check if my sshd_config has syntax errors?
Use the command sshd -t to test the configuration file for syntax errors. This command returns no output if the file is valid, or it prints an error message indicating the line number and nature of the problem. Always run this before restarting the service to avoid locking yourself out.
Is there a difference between restarting and reloading sshd?
Yes, restarting terminates all active SSH sessions and starts a new process, while reloading keeps existing sessions alive but updates the configuration. Reload is safer for non-disruptive changes, but restart is required for structural changes like port modifications. Choose based on whether you can afford to drop current connections.
Where is the default SSH configuration file located?
The main configuration file is typically located at /etc/ssh/sshd_config on Linux systems. Some distributions may also include additional configuration files in the /etc/ssh/sshd_config.d/ directory. Check your specific distribution's documentation for the exact path if it differs.