How to Generate SSH-KEYS

Along with debugging tips

Introduction

Working with virtual machines (VMs) frequently involves entering passwords for SSH access, which can be cumbersome and slow down your workflow. This guide explains how to generate SSH keys with ssh-keygen to automate this process, allowing for password-less login and enhancing security.

Motivation

Frequent password prompts not only disrupt your workflow but also pose a security risk through potential password exposure. By using SSH keys, you can secure your connections and save time.

What Is ssh-keygen?

SSH keys serve as a means of identifying yourself to an SSH server using public-key cryptography and challenge-response authentication. ssh-keygen is a standard tool for generating new authentication key pairs for SSH connections. These keys enable automated logins, single sign-on, and host authentication.

Generating Your SSH Key Pair:

Generate a key:

Open a terminal and run:

ssh-keygen -t ed25519

When prompted for a file name, you can specify it as filename_ed25519 for easy reference. This command creates a private key and a corresponding public key with the .pub extension.

Copy the Public Key to Your Server:

To enable password-less login, copy the public key to your host using:

ssh-copy-id -i ~/.ssh/keyname.pub USER@HOST

Add the Private Key to Your SSH Agent:

Add a private key to the agent with

ssh-add keyname

After this step, you should be able to SSH into the host without entering a password.

Configure on the VScode

Configure the file on the vscode as

Host name-of-ssh-host-here
    User your-user-name-on-host
    HostName host-fqdn-or-ip-goes-here
    IdentityFile ~/.ssh/id_ed25519-remote-ssh

Troubleshooting Common Issues:

If you encounter issues, consider the following troubleshooting steps:

Verbose SSH Logging:

Use verbose mode to identify connection problems:

ssh -v USER@HOST

Check Permissions and Ownership:

Incorrect permissions on your .ssh directory or files can cause issues. Verify permissions with:

sudo ls -ld .
sudo ls -l

If ownership is incorrect, correct it with:

sudo chown jz138:jz138 /home/jz138