Skip to content

SSH Keys for GitHub Actions ​

Why Create Multiple SSH Key Pairs? ​

Having more than one SSH key pair can help you:

  • Isolate access to different services (e.g., GitHub, other Git platforms, or personal servers).
  • Keep security organized (one key per project or environment).
  • Avoid accidental overwriting of existing SSH keys.

Step 1: Open a Terminal ​

This guide works on Linux, macOS, or Windows (using Git Bash or WSL). Make sure you have an up-to-date OpenSSH client installed.

Step 2: Generate a New SSH Key Pair ​

Use the ssh-keygen command to create a new key pair. You can customize the directory and file name so each key pair is unique. Two common variations:

  1. Without a comment (email address):

    sh
    ssh-keygen -t rsa -b 4096 -f /path/to/my_keys/unique_key_name
  2. With a comment (email address):

    sh
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f /path/to/my_keys/unique_key_name

Explanation of Flags: ​

  • -t rsa: Defines the key type (RSA).
  • -b 4096: Specifies the key length (4096 bits for stronger security).
  • -C "your_email@example.com": Adds a comment to the key, often used to identify the key’s owner or purpose (such as an email address). This is optional.
  • -f /path/to/my_keys/unique_key_name: Sets a custom file path and name for your private key. The public key will have the same name with a .pub extension.

Note (GitHub Actions): If you plan to use this key in a GitHub Actions workflow, you will typically store the private key content (the entire file) in a GitHub Secret. Then, in your workflow, you can echo the secret into a file (e.g., id_rsa) and use ssh-agent to load it. Make sure your .gitignore or repository settings prevent the private key from being accidentally committed.

Step 3: (Optional) Enter a Passphrase ​

When prompted, you can create a passphrase to add an extra layer of security. This passphrase will be required any time you use the key.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Press Enter at both prompts if you prefer no passphrase.

Step 4: View Your Key Pair ​

Your newly generated keys will be saved where you specified:

  • Private key (keep this secret!): /path/to/my_keys/unique_key_name
  • Public key (safe to share): /path/to/my_keys/unique_key_name.pub

To see your public key content:

sh
cat /path/to/my_keys/unique_key_name.pub

Step 5: Add Your SSH Key to the SSH Agent ​

Load your private key into the SSH agent so you don’t have to type your passphrase repeatedly (if you set one).

sh
eval "$(ssh-agent -s)"
ssh-add /path/to/my_keys/unique_key_name

Note (GitHub Actions): In a workflow, you can use the ssh-agent action (e.g., - name: Start ssh-agent) and then add your private key using:

yaml
- name: Add SSH Key
  run: |
    ssh-add - <<< "${{ secrets.MY_PRIVATE_KEY }}"

Step 6: Add the Public Key to Remote Servers ​

You need to place your public key (.pub file) on the remote server you want to access.

  1. Copy the contents of /path/to/my_keys/unique_key_name.pub.
  2. Append or paste it into ~/.ssh/authorized_keys on the remote server.

Or use ssh-copy-id for a more automated approach:

sh
ssh-copy-id -i /path/to/my_keys/unique_key_name.pub username@remote_host

Step 7: (Optional) Organize Keys in SSH Config ​

If you have many SSH keys, it’s convenient to store server connection info in ~/.ssh/config. This way, you can just type ssh myserver instead of ssh -i /path/to/my_keys/unique_key_name username@remote_host.

Open (or create) the file:

sh
nano ~/.ssh/config

Add an entry:

plaintext
Host myserver
    HostName remote_host
    User username
    IdentityFile /path/to/my_keys/unique_key_name

Note (GitHub Actions): Typically, you don’t need this for GitHub Actions unless you’re using multiple hosts or advanced SSH usage in your workflows.

Step 8: Connect Using Your SSH Key ​

After configuring the SSH config file (if you chose to do so), simply run:

sh
ssh myserver

If you didn’t set up an alias, you can connect like this:

sh
ssh -i /path/to/my_keys/unique_key_name username@remote_host

Summary ​

You’ve successfully created a unique SSH key pair, optionally secured it with a passphrase, and added it to your SSH agent. By customizing the file path and name (-f /path/to/my_keys/unique_key_name), you can generate multiple keys without overwriting your existing ones. You can also include your email or any identifier with the -C flag if you want a comment in the key.

To use these keys in GitHub Actions, store your private key in a GitHub Secret, then configure the ssh-agent within your workflow. For regular usage, remember to place your public key on the remote server and optionally configure ~/.ssh/config for quick access.

Repeat these steps for every additional SSH key pair you need.