10 KiB
title, intro, redirect_from, versions, topics, shortTitle
| title | intro | redirect_from | versions | topics | shortTitle | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Generating a new SSH key and adding it to the ssh-agent | After you've checked for existing SSH keys, you can generate a new SSH key to use for authentication, then add it to the ssh-agent. |
|
|
|
Generate new SSH key |
About SSH key generation
If you don't already have an SSH key, you must generate a new SSH key to use for authentication. If you're unsure whether you already have an SSH key, you can check for existing keys. For more information, see "Checking for existing SSH keys."
{% ifversion fpt or ghae or ghes > 3.1 or ghec %}
If you want to use a hardware security key to authenticate to {% data variables.product.product_name %}, you must generate a new SSH key for your hardware security key. You must connect your hardware security key to your computer when you authenticate with the key pair. For more information, see the OpenSSH 8.2 release notes.
{% endif %} If you don't want to reenter your passphrase every time you use your SSH key, you can add your key to the SSH agent, which manages your SSH keys and remembers your passphrase.
Generating a new SSH key
{% data reusables.command_line.open_the_multi_os_terminal %} 2. Paste the text below, substituting in your {% data variables.product.product_name %} email address. {% ifversion ghae %}
$ ssh-keygen -t rsa -b 4096 -C "<em>your_email@example.com</em>"
{% else %}
$ ssh-keygen -t ed25519 -C "<em>your_email@example.com</em>"
{% note %}
Note: If you are using a legacy system that doesn't support the Ed25519 algorithm, use:
$ ssh-keygen -t rsa -b 4096 -C "<em>your_email@example.com</em>"
{% endnote %} {% endif %}
This creates a new SSH key, using the provided email as a label.
> Generating public/private <em>algorithm</em> key pair.
- When you're prompted to "Enter a file in which to save the key," press Enter. This accepts the default file location.
{% mac %}
> Enter a file in which to save the key (/Users/<em>you</em>/.ssh/id_<em>algorithm</em>): <em>[Press enter]</em>
{% endmac %}
{% windows %}
> Enter a file in which to save the key (/c/Users/<em>you</em>/.ssh/id_<em>algorithm</em>):<em>[Press enter]</em>
{% endwindows %}
{% linux %}
> Enter a file in which to save the key (/home/<em>you</em>/.ssh/<em>algorithm</em>): <em>[Press enter]</em>
{% endlinux %}
- At the prompt, type a secure passphrase. For more information, see "Working with SSH key passphrases."
> Enter passphrase (empty for no passphrase): <em>[Type a passphrase]</em>
> Enter same passphrase again: <em>[Type passphrase again]</em>
Adding your SSH key to the ssh-agent
Before adding a new SSH key to the ssh-agent to manage your keys, you should have checked for existing SSH keys and generated a new SSH key. When adding your SSH key to the agent, use the default macOS ssh-add command, and not an application installed by macports, homebrew, or some other external source.
{% mac %}
{% data reusables.command_line.start_ssh_agent %}
-
If you're using macOS Sierra 10.12.2 or later, you will need to modify your
~/.ssh/configfile to automatically load keys into the ssh-agent and store passphrases in your keychain.-
First, check to see if your
~/.ssh/configfile exists in the default location.$ open ~/.ssh/config > The file /Users/<em>you</em>/.ssh/config does not exist. -
If the file doesn't exist, create the file.
$ touch ~/.ssh/config -
Open your
~/.ssh/configfile, then modify the file to contain the following lines. If your SSH key file has a different name or path than the example code, modify the filename or path to match your current setup.Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_{% ifversion ghae %}ecdsa{% else %}ed25519{% endif %}
{% note %}
Note: If you chose not to add a passphrase to your key, you should omit the
UseKeychainline.{% endnote %}
{% mac %} {% note %}
Note: If you see an error like this
/Users/USER/.ssh/config: line 16: Bad configuration option: usekeychainadd an additional config line to your
Host *section:Host * IgnoreUnknown UseKeychain{% endnote %} {% endmac %}
-
-
Add your SSH private key to the ssh-agent and store your passphrase in the keychain. {% data reusables.ssh.add-ssh-key-to-ssh-agent %}
$ ssh-add -K ~/.ssh/id_{% ifversion ghae %}rsa{% else %}ed25519{% endif %}
{% note %}
**Note:** The `-K` option is Apple's standard version of `ssh-add`, which stores the passphrase in your keychain for you when you add an SSH key to the ssh-agent. If you chose not to add a passphrase to your key, run the command without the `-K` option.
If you don't have Apple's standard version installed, you may receive an error. For more information on resolving this error, see "[Error: ssh-add: illegal option -- K](/articles/error-ssh-add-illegal-option-k)."
In MacOS Monterey (12.0), the `-K` and `-A` flags are deprecated and have been replaced by the `--apple-use-keychain` and `--apple-load-keychain` flags, respectively.
{% endnote %}
4. Add the SSH key to your account on {% data variables.product.product_name %}. For more information, see "[Adding a new SSH key to your {% data variables.product.prodname_dotcom %} account](/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account)."
{% endmac %}
{% windows %}
{% data reusables.desktop.windows_git_bash %}
1. Ensure the ssh-agent is running. You can use the "Auto-launching the ssh-agent" instructions in "[Working with SSH key passphrases](/articles/working-with-ssh-key-passphrases)", or start it manually:
```shell
# start the ssh-agent in the background
$ eval "$(ssh-agent -s)"
> Agent pid 59566
-
Add your SSH private key to the ssh-agent. {% data reusables.ssh.add-ssh-key-to-ssh-agent %} {% data reusables.ssh.add-ssh-key-to-ssh-agent-commandline %}
-
Add the SSH key to your account on {% data variables.product.product_name %}. For more information, see "Adding a new SSH key to your {% data variables.product.prodname_dotcom %} account."
{% endwindows %}
{% linux %}
{% data reusables.command_line.start_ssh_agent %}
-
Add your SSH private key to the ssh-agent. {% data reusables.ssh.add-ssh-key-to-ssh-agent %} {% data reusables.ssh.add-ssh-key-to-ssh-agent-commandline %}
-
Add the SSH key to your account on {% data variables.product.product_name %}. For more information, see "Adding a new SSH key to your {% data variables.product.prodname_dotcom %} account."
{% endlinux %}
{% ifversion fpt or ghae or ghes > 3.1 or ghec %}
Generating a new SSH key for a hardware security key
If you are using macOS or Linux, you may need to update your SSH client or install a new SSH client prior to generating a new SSH key. For more information, see "Error: Unknown key type."
- Insert your hardware security key into your computer. {% data reusables.command_line.open_the_multi_os_terminal %}
- Paste the text below, substituting in the email address for your account on {% data variables.product.product_name %}.
$ ssh-keygen -t {% ifversion ghae %}ecdsa{% else %}ed25519{% endif %}-sk -C "<em>your_email@example.com</em>"
{% ifversion not ghae %} {% note %}
Note: If the command fails and you receive the error invalid format or feature not supported, you may be using a hardware security key that does not support the Ed25519 algorithm. Enter the following command instead.
$ ssh-keygen -t ecdsa-sk -C "your_email@example.com"
{% endnote %} {% endif %} 4. When you are prompted, touch the button on your hardware security key. 5. When you are prompted to "Enter a file in which to save the key," press Enter to accept the default file location.
{% mac %}
> Enter a file in which to save the key (/Users/<em>you</em>/.ssh/id_{% ifversion ghae %}ecdsa{% else %}ed25519{% endif %}_sk): <em>[Press enter]</em>
{% endmac %}
{% windows %}
> Enter a file in which to save the key (/c/Users/<em>you</em>/.ssh/id_{% ifversion ghae %}ecdsa{% else %}ed25519{% endif %}_sk):<em>[Press enter]</em>
{% endwindows %}
{% linux %}
> Enter a file in which to save the key (/home/<em>you</em>/.ssh/id_{% ifversion ghae %}ecdsa{% else %}ed25519{% endif %}_sk): <em>[Press enter]</em>
{% endlinux %}
- When you are prompted to type a passphrase, press Enter.
> Enter passphrase (empty for no passphrase): <em>[Type a passphrase]</em>
> Enter same passphrase again: <em>[Type passphrase again]</em>
- Add the SSH key to your account on {% data variables.product.prodname_dotcom %}. For more information, see "Adding a new SSH key to your {% data variables.product.prodname_dotcom %} account."
{% endif %}
Further reading
- "About SSH"
- "Working with SSH key passphrases" {%- ifversion fpt or ghec %}
- "Authorizing an SSH key for use with SAML single sign-on"{% ifversion fpt %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %} {%- endif %}