Using the SSH Config File
Introduction
Before we begin talking about how to use the SSH Configuration File, let's briefly understand – What is SSH ?
SSH, short for Secure Shell, is a secure network protocol for remote access and file transfers. It encrypts and protects data exchanged between a client and a server, preventing unauthorized access and eavesdropping.
SSH provides a secure way to connect to servers and devices remotely, managing them securely from anywhere. Its authentication protocol ensures only authorized users can access sensitive information, making it an essential tool for system administrators and developers. Discover more about SSH's role in securing remote connections and data transfers.
In this tutorial, you will use the SSH Configuration File. We will also address a few FAQs on how to use the SSH Config File.
Advantages of SSH
- Secure Remote Access: SSH ensures encrypted and secure connections, preventing unauthorized access to remote systems.
- Data Protection: SSH encrypts transmitted data, safeguarding it from eavesdropping and potential tampering.
- Authentication: SSH uses strong authentication methods, ensuring only authorized users can establish a connection.
- Port Forwarding: SSH allows secure tunneling of data between local and remote ports, facilitating secure communication.
- File Transfer: SSH supports secure file transfers between devices, ensuring data integrity and confidentiality.
Prerequisites
We'll assume you're running Linux or macOS and have the OpenSSH client installed.
SSH Config File Location
The config
file for OpenSSH is located in the .ssh
directory under the user's home directory and is entitled config.
When a user uses the ssh command
for the first time, the ~/.ssh
directory is created automatically. If the directory does not exist on your system, use the following command to create it:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
If the SSH configuration file does not exist by default, use the touch command to create it:
touch ~/.ssh/config
This file must only be readable and writable by the user, and it must not be available to anybody else:
chmod 600 ~/.ssh/config
SSH Config File Structure and Patterns
Patterns and Structure of SSH Configuration Files
Host hostname1
SSH_OPTION value
SSH_OPTION value
Host hostname2
SSH_OPTION value
Host *
SSH_OPTION value
Stanzas are used to organize the contents of the SSH client config file (sections). Each stanza begins with the Host directive and lists particular SSH parameters to use when connecting to a remote SSH server.
Indentation is optional, but preferred because it makes the document simpler to read.
The Host directive can contain a single pattern or a list of patterns separated by whitespace. Each pattern can contain one of the following pattern specifiers or zero or more non-whitespace characters:
*
- Matches zero or more characters. For example,Host *
matches all hosts, while192.168.0.*
matches hosts in the192.168.0.0/24
subnet.?
- Matches exactly one character. The pattern,Host 10.10.0.?
matches all hosts in10.10.0.[0-9]
range.!
- It denies the match when used at the start of a pattern. For example,Host 10.10.0.* !10.10.0.5
matches any host in the10.10.0.0/24
subnet except10.10.0.5
.
The SSH client scans the configuration file stanza by stanza, and if multiple patterns match, the first matching stanza's settings take precedence. As a result, more host-specific declarations should be at the front of the file, and more universal overrides should go towards the bottom.
By entering man ssh_config
in your terminal or reading the ssh config man page, you may get a complete list of available ssh settings.
Other programs, such as scp
, sftp
, and rsync
read the SSH config file.
SSH Config File Example
Let's look at an example of an SSH configuration file now that we've covered the basics.
When connecting to a remote server through SSH, the remote user name, hostname, and port are usually specified. For instance, to log in as john
to dev.example.com
on port 2322
from the command line, type:
ssh john@dev.example.com -p 2322
Put the following lines in your "~/.ssh/config
file to connect to the server using the same options as the command above, simply by entering ssh dev
:
Host dev
HostName dev.example.com
User john
Port 2322
When you run ssh dev
, the ssh client will read the configuration file and connect to the dev
host using the following credentials:
ssh dev
Shared SSH Config File Example
This example explains the host patterns and option precedence in further detail.
Take the following file as an example:
Host targaryen
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
Host tyrell
HostName 192.168.10.20
Host martell
HostName 192.168.10.50
Host *ell
user oberyn
Host * !martell
LogLevel INFO
Host *
User root
Compression yes
- The ssh client scans the file and applies the settings from the first match, which is
Host targaryen
, when you executessh targaryen
. The next stanzas are then checked one by one for a matching pattern.Host *!martell
(all hosts exceptmartell
) is the next one that matches, and it will use the connection option from this stanza. The last specification,Host *
, likewise matches, but because the User option is already provided in theHost targaryen
stanza, the ssh client will only accept the Compression option.
The following is the complete list of options available when you typessh targaryen
.
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
LogLevel INFO
Compression yes
Host tyrell
,Host *ell
,Host *!martell
, andHost *
are the matching host patterns when usingssh tyrell
. Options used in this case are:
HostName 192.168.10.20
User oberyn
LogLevel INFO
Compression yes
- The matched host patterns for
ssh martell
are:Host martell
,Host *ell
, andHost *
. Options used in this case are:
HostName 192.168.10.50
User oberyn
Compression yes
- The ssh client will utilize the options supplied in the
Host *!martell
for any other connections. Sections andHost *
.
Override SSH Config File Option
The following is the order in which the ssh client reads its configuration:
- Options specified from the command line.
- Options defined in the
~/.ssh/config
. - Options defined in the
/etc/ssh/ssh_config
.
You can specify a single option on the command line if you want to override it. For instance, consider the following definition:
Host dev
HostName dev.example.com
User john
Port 2322
If you want to utilize all of the other settings but connect as user root instead of john, provide the user on the command line as follows:
ssh -o "User=root" dev
You can specify an alternative per-user configuration file using the -F
(configfile
) option.
Use the following command to tell the ssh
client to ignore all of the options in the ssh configuration file:
ssh -F /dev/null user@example.com
FAQs to Using the SSH Configuration File
What settings can I configure in the SSH config file?
You can define various settings, including host aliases, remote usernames, preferred authentication methods, forwarding options, and more.
How do I set up host-specific configurations?
By specifying the hostname or alias as a configuration block header in the SSH config file, you can define settings that apply only to that specific host.
Can I disable strict host key checking for a specific host?
Yes, by setting the "StrictHostKeyChecking" option to "no" in the host-specific configuration block, you can disable strict host key checking for that host.
How do I configure SSH to use a specific private key for a host?
You can specify the private key file to use for a specific host by defining the "IdentityFile" option in the host-specific configuration block.
Can I configure SSH to use a non-standard port for a host?
Yes, by setting the "Port" option in the host-specific configuration block, you can instruct SSH to connect to that host using a non-standard port.
How can I save time using SSH config file?
The SSH config file enables you to define connection settings once, avoiding repetitive commands and allowing quick connections with a simple SSH hostname.
Can I use wildcards in the SSH config file?
Yes, you can use wildcards like "*" to match multiple hosts or patterns and define global or group-specific settings.
Conclusion
We've taught you how to set up your user's ssh configuration file. Set up SSH key-based authentication to login to your Linux servers without having to enter a password.
SSH listens on port 22 by default. By minimizing the danger of automated attacks, changing the default SSH port offers an extra layer of security to your server.
If you have any queries, please leave a comment below and we’ll be happy to respond to them.