Categories: TutorialsUbuntu

How to Generate SSH Key with ssh-keygen in Linux/Ubuntu?

SSH (Secure Shell) enables users to perform certain tasks, like file transfer, port forwarding, tunnel creation, configuring remote servers, etc. remotely over a secure connection. SSH client is pre-installed in Linux systems. SSH offers two password authentication methods, password authentication and public key-based authentication (SSH Keys). Among these techniques, public key-based authentication enables a higher level of security as compared to longer passwords as it is backed by ciphers.

This article will demonstrate how to generate an SSH key with ssh-keygen in Linux/Ubuntu 22.04 LTS. This article will discuss:

  • How to Generate/Create SSH Key in Linux/Ubuntu?
  • How to Generate/Create SSH Keys of Different Types and Sizes?
  • Sponsored
  • How to Log in/Connect to a Remote Server via an SSH Key?
  • How to Disable SSH Password Authentication?

How to Generate/Create SSH Key with ssh-keygen in Linux/Ubuntu?

The following steps are performed in order to generate an SSH keypair:

Step 1: Verify if the SSH Key Pair Exists

Before starting the SSH key generation process, a user can check if any SSH keys already exist in the system as the keys are overwritten if SSH keys are already present in the system. A user can run the following command to verify if SSH keys exist in the system:

$ ls -l ~/.ssh/id_*.pub

It can be observed from the above image, that there is no SSH key in the system.

Step 2: Generation of SSH Key Pair

SSH key pair is generated by executing the following command

$ ssh-keygen

The user is then prompted to enter the file location to save the keys and a passphrase, after which an SSH keypair is generated with default parameters, i.e., 3072 bits with RSA type. The keys are saved in the /home/linuxuser/.ssh directory by default.

Step 3: Verification of SSH Key Generation

To verify that keys are generated, the following command is executed:

$ ls -l ~/.ssh/id_*.pub

From the above image, it can be verified that the ssh key is generated. The generated keys can be viewed by navigating to the “/home/linuxuser/.ssh” directory using the cd command:

$ cd /home/linuxuser/.ssh

From the above image, it can be seen that public and private keys are generated successfully, i.e., id_rsa.pub and id_rsa. These keys can be viewed via the cat command.

To view the public key run the following command:

$ cat id_rsa.pub

Similarly, the private key can be viewed by executing the following command:

$ cat id_rsa

How to Generate/Create SSH Key of Different Types and Sizes?

ssh-keygen generates a key of RSA type and 3072 bits by default, but a user can modify these parameters by using type (-t) and size (-b) flags followed by the ssh-keygen command. Three types of keys can be generated:

  • RSA (Rivest Shamir Adleman): RSA encrypts and decrypts using separate but mathematical-related keys. It uses key sizes of 2048 and 3072 bits.
  • DSA (Digital Signature Algorithm): DSA is faster than RSA. DSA mostly uses a key size of 1024 bits.
  • ECDSA (Elliptic Curves Digital Signature Algorithm): ECDSA is more secure and faster than DSA and RSA. Additionally, ECDSA utilizes lower bandwidth and achieves a higher level of security by using a smaller key size i.e., 256, 384, and 521 bits.

The following command is used to generate a 384-bit key of type ECDSA:

$ ssh-keygen -t ecdsa -b 384

Where:

  • t: type, for example, RSA, DSA, ECDSA.
  • b: bits (256-bit, 384-bit, or 521-bit)

The user is then prompted to enter the file location to save the keys and a passphrase after which an SSH key pair is then generated of type ECDSA and size 384.

To verify that keys are generated, the following command is executed:

$ ls -l ~/.ssh/id_*.pub

Sponsored

From the above image, it can be verified that the SSH key: id_ecdsa.pub is generated.

How to Log in to a Remote Server via SSH Key?

A user can log in to a remote server with the generated SSH keys by the following steps:

Step 1: Copy the Public Key to the Ubuntu Remote Server.

OpenSSH is a connectivity tool that enables secure encryption for file transfer and remote log-in. The following command is used to install Open SSH

$ sudo apt install openssh-server

Press Y to continue with the installation. It will take a few seconds for the Open SSH installation to be completed.

The status of SSH services can be checked by:

$ sudo service ssh status

From the above image, it can be seen that the ssh service is active. Next, the earlier generated public key is copied to the remote server by executing the following command:

$ ssh-copy-id linuxuser@ubuntu

Where:

  • ssh-copy-id: command line tool to copy SSH key to the server.
  • linuxuser: User Name.
  • Ubuntu: Remote Server IP or Hostname.

From the above command, it can be verified that the public key is added to the remote server.

Step 2: Log-In/Connect to a Remote Server with SSH Key

A user can log in to a remote server via ssh command by executing the following command:

$ ssh linuxuser@ubuntu

Where:

  • linuxuser: User Name.
  • ubuntu: Remote Server IP or Hostname.

The user is then prompted to enter the passphrase for the private key that was selected at the time of SSH key generation:

Enter the passphrase and press Unlock to log in to a remote server:

From the above image, it can be seen that the login to a remote server is successful.

How to Disable SSH Password Authentication?

An extra layer of security can be enabled by disabling the SSH password authentication. In order to disable SSH password authentication, a user can follow the below steps:

  • Log in to the remote server with sudo privileges and modify the SSH configuration file, i.e., sshd_config by executing the following command:
$ sudo nano /etc/ssh/sshd_config

  • Uncomment the line containing “passwordauthentication yes”.
  • Replace yes to no as shown below:

  • Save and exit the file by pressing [Ctrl+O] and [Ctrl+X].
  • Restart ssh by executing the following command:
$ sudo systemctl restart ssh

  • Verify the status of SSH to ensure that SSH is active and running.
$ sudo systemctl status ssh

The above image verifies that the SSH password authentication is disabled on the server.

Conclusion

An SSH key pair is generated by the “ssh-keygen” command. Additionally, the key type and size can be selected by “-t” and “-b” flags respectively. This article demonstrated how to generate an SSH key with ssh-keygen in Linux/Ubuntu 22.04 LTS. Additionally, logging in on a Ubuntu remote server with SSH public key and disabling password-based authentication is also discussed in this article.

Ubuntu Server Admin

Recent Posts

Cut data center energy costs with bare metal automation

Data centers are popping up everywhere. With the rapid growth of AI, cloud services, streaming…

23 hours ago

Build the future of *craft: announcing Starcraft Bounties!

Our commitment to building a thriving open source community is stronger than ever. We believe…

23 hours ago

NodeJS 18 LTS EOL extended from April 2025 to May 2032 on Ubuntu

The clock was ticking: Node.js 18’s upstream End of Life (EOL) The OpenJS Foundation is…

23 hours ago

Native integration now available for Pure Storage and Canonical LXD

June 25th, 2025 – Canonical, the company behind Ubuntu, and Pure Storage, the IT pioneer…

2 days ago

Revolutionizing Web Page Creation: How Structured Content is Slashing Design and Development Time

Co-authored with Julie Muzina A year ago, during our Madrid Engineering Sprint, we challenged ourselves…

3 days ago

Ubuntu Weekly Newsletter Issue 897

Welcome to the Ubuntu Weekly Newsletter, Issue 897 for the week of June 15 –…

4 days ago