I am a new RHEL 8 server sysadmin. How do I configure SSH public key-based authentication for RHEL (Red Hat Enterprise Linux) 8 server?
Introduction – SSH is an acronym for secure shell. It is a suite of cryptographic network protocol. It allows users to log in and transfer files securely over the unsecure network such as the Internet. OpenSSH is an implementation of SSH protocol on RHEL 8. You can log in using RHEL 8 user and password account. However, OpenSSH project recommends log in using a combination of a private and public SSH keys.
Sample set up for our RHEL 8 server
- You generate a key pair on your Linux/Unix/macOS desktop.
- Place the public key on RHEL 8 server.
- One can unlock public key using a private key stored on your desktop with the help of ssh command.
- When both the public and private key correct you can log in without a password.
How do I set up SSH keys on RHEL 8 server?
The procedure to set up SSH key on Red Hat Enteprise Linux 8 server:
- On your local desktop type:
- Install public key into remote RHEL 8 server using:
ssh-copy-id [email protected]
- Use ssh for password less login:
ssh [email protected]
Let us see all commands and steps in details.
How to create the ed25519 or RSA key pair
The syntax is:
ssh-keygen -t ed25519
ssh-keygen -t rsa
ssh-keygen -t rsa -b 4096 -f ~/.ssh/aws-lighsail.key -C "My AWS SSH Keys"
ssh-keygen -t ed25519 -f ~/.ssh/linode-usa-www1-vps.key -C "My Linode SSH Keys for www"
- -t rsa OR -t ed25519 : Specifies the type of key to create. The possible values “dsa”, “ecdsa”, “ed25519”, or “rsa” for SSH protocol version 2.
- -b 4096 : Specifies the number of bits in the key to create.
- -f~/.ssh/aws-lighsail.key : Specifies the filename of the key file.
- -C -C "My AWS SSH Keys" : Set a new comment.
I am going type the following command on my Ubuntu desktop to create the key pair:
$ ssh-keygen -t ed25519
I strongly recommend that you set up a passphrase when prompted.
How to copy the public key
Now our key paid generated and stored in ~/.ssh/ directory. You must copy a public SSH key file named ~/.ssh/id_ed25519.pub (or ~/.ssh/id_rsa.pub if you created RSA key) to the RHEL 8 server. Try the ssh-copy-id command as follows:
$ ssh-copy-id -i ~/.ssh/fileNameHere.pub user@remote-RHEL8-server-ip
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
How to log in using ssh and without a password
Now try logging into the machine, with the ssh command as follows:
$ ssh [email protected]
$ ssh [email protected]
You should be able to log in without a password. If you set up a passphrase, unlock it as follows for your current session so that you don’t have to enter it every time you run ssh, sftp, scp, rsync and other commands:
$ ssh-agent $SHELL
Optional settings for root user
Disable root user log in all together on RHEL 8 via ssh. Log in as root user on RHEL 8 and run following to add a user named vivek to wheel group:
# usermod -aG wheel vivek
# id vivek
Allows users in group wheel can use sudo command to run all commands on RHEL 8 server. Next disable root user login by adding the following line to sshd_config:
# vi /etc/ssh/sshd_config
Disable the password for root login and only allow ssh keys based login:
PermitRootLogin no ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
Save and close the file. Reload the ssh server:
# systemctl reload sshd.service
For more info see “Top 20 OpenSSH Server Best Security Practices“.
You learned how to set up and use SSH keys to manage your RHEL 8 based server. For more info see OpenSSH man pages here.