| SSH-KEYGEN(1) OpenBSD Reference Manual SSH-KEYGEN(1) |
| |
| NAME |
| ssh-keygen - authentication key generation, management and conversion |
| |
| SYNOPSIS |
| ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] |
| [-f output_keyfile] |
| ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] |
| ssh-keygen -i [-m key_format] [-f input_keyfile] |
| ssh-keygen -e [-m key_format] [-f input_keyfile] |
| ssh-keygen -y [-f input_keyfile] |
| ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile] |
| ssh-keygen -l [-f input_keyfile] |
| ssh-keygen -B [-f input_keyfile] |
| ssh-keygen -D pkcs11 |
| ssh-keygen -F hostname [-f known_hosts_file] [-l] |
| ssh-keygen -H [-f known_hosts_file] |
| ssh-keygen -R hostname [-f known_hosts_file] |
| ssh-keygen -r hostname [-f input_keyfile] [-g] |
| ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point] |
| ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-K checkpt] |
| [-W generator] |
| ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals] |
| [-O option] [-V validity_interval] [-z serial_number] file ... |
| ssh-keygen -L [-f input_keyfile] |
| ssh-keygen -A |
| |
| DESCRIPTION |
| ssh-keygen generates, manages and converts authentication keys for |
| ssh(1). ssh-keygen can create RSA keys for use by SSH protocol version 1 |
| and DSA, ECDSA or RSA keys for use by SSH protocol version 2. The type |
| of key to be generated is specified with the -t option. If invoked |
| without any arguments, ssh-keygen will generate an RSA key for use in SSH |
| protocol 2 connections. |
| |
| ssh-keygen is also used to generate groups for use in Diffie-Hellman |
| group exchange (DH-GEX). See the MODULI GENERATION section for details. |
| |
| Normally each user wishing to use SSH with public key authentication runs |
| this once to create the authentication key in ~/.ssh/identity, |
| ~/.ssh/id_ecdsa, ~/.ssh/id_dsa or ~/.ssh/id_rsa. Additionally, the |
| system administrator may use this to generate host keys, as seen in |
| /etc/rc. |
| |
| Normally this program generates the key and asks for a file in which to |
| store the private key. The public key is stored in a file with the same |
| name but ``.pub'' appended. The program also asks for a passphrase. The |
| passphrase may be empty to indicate no passphrase (host keys must have an |
| empty passphrase), or it may be a string of arbitrary length. A |
| passphrase is similar to a password, except it can be a phrase with a |
| series of words, punctuation, numbers, whitespace, or any string of |
| characters you want. Good passphrases are 10-30 characters long, are not |
| simple sentences or otherwise easily guessable (English prose has only |
| 1-2 bits of entropy per character, and provides very bad passphrases), |
| and contain a mix of upper and lowercase letters, numbers, and non- |
| alphanumeric characters. The passphrase can be changed later by using |
| the -p option. |
| |
| There is no way to recover a lost passphrase. If the passphrase is lost |
| or forgotten, a new key must be generated and the corresponding public |
| key copied to other machines. |
| |
| For RSA1 keys, there is also a comment field in the key file that is only |
| for convenience to the user to help identify the key. The comment can |
| tell what the key is for, or whatever is useful. The comment is |
| initialized to ``user@host'' when the key is created, but can be changed |
| using the -c option. |
| |
| After a key is generated, instructions below detail where the keys should |
| be placed to be activated. |
| |
| The options are as follows: |
| |
| -A For each of the key types (rsa1, rsa, dsa and ecdsa) for which |
| host keys do not exist, generate the host keys with the default |
| key file path, an empty passphrase, default bits for the key |
| type, and default comment. This is used by /etc/rc to generate |
| new host keys. |
| |
| -a trials |
| Specifies the number of primality tests to perform when screening |
| DH-GEX candidates using the -T command. |
| |
| -B Show the bubblebabble digest of specified private or public key |
| file. |
| |
| -b bits |
| Specifies the number of bits in the key to create. For RSA keys, |
| the minimum size is 768 bits and the default is 2048 bits. |
| Generally, 2048 bits is considered sufficient. DSA keys must be |
| exactly 1024 bits as specified by FIPS 186-2. For ECDSA keys, |
| the -b flag determines the key length by selecting from one of |
| three elliptic curve sizes: 256, 384 or 521 bits. Attempting to |
| use bit lengths other than these three values for ECDSA keys will |
| fail. |
| |
| -C comment |
| Provides a new comment. |
| |
| -c Requests changing the comment in the private and public key |
| files. This operation is only supported for RSA1 keys. The |
| program will prompt for the file containing the private keys, for |
| the passphrase if the key has one, and for the new comment. |
| |
| -D pkcs11 |
| Download the RSA public keys provided by the PKCS#11 shared |
| library pkcs11. When used in combination with -s, this option |
| indicates that a CA key resides in a PKCS#11 token (see the |
| CERTIFICATES section for details). |
| |
| -e This option will read a private or public OpenSSH key file and |
| print to stdout the key in one of the formats specified by the -m |
| option. The default export format is ``RFC4716''. This option |
| allows exporting OpenSSH keys for use by other programs, |
| including several commercial SSH implementations. |
| |
| -F hostname |
| Search for the specified hostname in a known_hosts file, listing |
| any occurrences found. This option is useful to find hashed host |
| names or addresses and may also be used in conjunction with the |
| -H option to print found keys in a hashed format. |
| |
| -f filename |
| Specifies the filename of the key file. |
| |
| -G output_file |
| Generate candidate primes for DH-GEX. These primes must be |
| screened for safety (using the -T option) before use. |
| |
| -g Use generic DNS format when printing fingerprint resource records |
| using the -r command. |
| |
| -H Hash a known_hosts file. This replaces all hostnames and |
| addresses with hashed representations within the specified file; |
| the original content is moved to a file with a .old suffix. |
| These hashes may be used normally by ssh and sshd, but they do |
| not reveal identifying information should the file's contents be |
| disclosed. This option will not modify existing hashed hostnames |
| and is therefore safe to use on files that mix hashed and non- |
| hashed names. |
| |
| -h When signing a key, create a host certificate instead of a user |
| certificate. Please see the CERTIFICATES section for details. |
| |
| -I certificate_identity |
| Specify the key identity when signing a public key. Please see |
| the CERTIFICATES section for details. |
| |
| -i This option will read an unencrypted private (or public) key file |
| in the format specified by the -m option and print an OpenSSH |
| compatible private (or public) key to stdout. |
| |
| -K checkpt |
| Write the last line processed to the file checkpt while |
| performing DH candidate screening using the -T option. This will |
| be used to skip lines in the input file that have already been |
| processed if the job is restarted. This option allows importing |
| keys from other software, including several commercial SSH |
| implementations. The default import format is ``RFC4716''. |
| |
| -L Prints the contents of a certificate. |
| |
| -l Show fingerprint of specified public key file. Private RSA1 keys |
| are also supported. For RSA and DSA keys ssh-keygen tries to |
| find the matching public key file and prints its fingerprint. If |
| combined with -v, an ASCII art representation of the key is |
| supplied with the fingerprint. |
| |
| -M memory |
| Specify the amount of memory to use (in megabytes) when |
| generating candidate moduli for DH-GEX. |
| |
| -m key_format |
| Specify a key format for the -i (import) or -e (export) |
| conversion options. The supported key formats are: ``RFC4716'' |
| (RFC 4716/SSH2 public or private key), ``PKCS8'' (PEM PKCS8 |
| public key) or ``PEM'' (PEM public key). The default conversion |
| format is ``RFC4716''. |
| |
| -N new_passphrase |
| Provides the new passphrase. |
| |
| -n principals |
| Specify one or more principals (user or host names) to be |
| included in a certificate when signing a key. Multiple |
| principals may be specified, separated by commas. Please see the |
| CERTIFICATES section for details. |
| |
| -O option |
| Specify a certificate option when signing a key. This option may |
| be specified multiple times. Please see the CERTIFICATES section |
| for details. The options that are valid for user certificates |
| are: |
| |
| clear Clear all enabled permissions. This is useful for |
| clearing the default set of permissions so permissions |
| may be added individually. |
| |
| force-command=command |
| Forces the execution of command instead of any shell or |
| command specified by the user when the certificate is |
| used for authentication. |
| |
| no-agent-forwarding |
| Disable ssh-agent(1) forwarding (permitted by default). |
| |
| no-port-forwarding |
| Disable port forwarding (permitted by default). |
| |
| no-pty Disable PTY allocation (permitted by default). |
| |
| no-user-rc |
| Disable execution of ~/.ssh/rc by sshd(8) (permitted by |
| default). |
| |
| no-x11-forwarding |
| Disable X11 forwarding (permitted by default). |
| |
| permit-agent-forwarding |
| Allows ssh-agent(1) forwarding. |
| |
| permit-port-forwarding |
| Allows port forwarding. |
| |
| permit-pty |
| Allows PTY allocation. |
| |
| permit-user-rc |
| Allows execution of ~/.ssh/rc by sshd(8). |
| |
| permit-x11-forwarding |
| Allows X11 forwarding. |
| |
| source-address=address_list |
| Restrict the source addresses from which the certificate |
| is considered valid. The address_list is a comma- |
| separated list of one or more address/netmask pairs in |
| CIDR format. |
| |
| At present, no options are valid for host keys. |
| |
| -P passphrase |
| Provides the (old) passphrase. |
| |
| -p Requests changing the passphrase of a private key file instead of |
| creating a new private key. The program will prompt for the file |
| containing the private key, for the old passphrase, and twice for |
| the new passphrase. |
| |
| -q Silence ssh-keygen. |
| |
| -R hostname |
| Removes all keys belonging to hostname from a known_hosts file. |
| This option is useful to delete hashed hosts (see the -H option |
| above). |
| |
| -r hostname |
| Print the SSHFP fingerprint resource record named hostname for |
| the specified public key file. |
| |
| -S start |
| Specify start point (in hex) when generating candidate moduli for |
| DH-GEX. |
| |
| -s ca_key |
| Certify (sign) a public key using the specified CA key. Please |
| see the CERTIFICATES section for details. |
| |
| -T output_file |
| Test DH group exchange candidate primes (generated using the -G |
| option) for safety. |
| |
| -t type |
| Specifies the type of key to create. The possible values are |
| ``rsa1'' for protocol version 1 and ``dsa'', ``ecdsa'' or ``rsa'' |
| for protocol version 2. |
| |
| -V validity_interval |
| Specify a validity interval when signing a certificate. A |
| validity interval may consist of a single time, indicating that |
| the certificate is valid beginning now and expiring at that time, |
| or may consist of two times separated by a colon to indicate an |
| explicit time interval. The start time may be specified as a |
| date in YYYYMMDD format, a time in YYYYMMDDHHMMSS format or a |
| relative time (to the current time) consisting of a minus sign |
| followed by a relative time in the format described in the TIME |
| FORMATS section of sshd_config(5). The end time may be specified |
| as a YYYYMMDD date, a YYYYMMDDHHMMSS time or a relative time |
| starting with a plus character. |
| |
| For example: ``+52w1d'' (valid from now to 52 weeks and one day |
| from now), ``-4w:+4w'' (valid from four weeks ago to four weeks |
| from now), ``20100101123000:20110101123000'' (valid from 12:30 |
| PM, January 1st, 2010 to 12:30 PM, January 1st, 2011), |
| ``-1d:20110101'' (valid from yesterday to midnight, January 1st, |
| 2011). |
| |
| -v Verbose mode. Causes ssh-keygen to print debugging messages |
| about its progress. This is helpful for debugging moduli |
| generation. Multiple -v options increase the verbosity. The |
| maximum is 3. |
| |
| -W generator |
| Specify desired generator when testing candidate moduli for DH- |
| GEX. |
| |
| -y This option will read a private OpenSSH format file and print an |
| OpenSSH public key to stdout. |
| |
| -z serial_number |
| Specifies a serial number to be embedded in the certificate to |
| distinguish this certificate from others from the same CA. The |
| default serial number is zero. |
| |
| MODULI GENERATION |
| ssh-keygen may be used to generate groups for the Diffie-Hellman Group |
| Exchange (DH-GEX) protocol. Generating these groups is a two-step |
| process: first, candidate primes are generated using a fast, but memory |
| intensive process. These candidate primes are then tested for |
| suitability (a CPU-intensive process). |
| |
| Generation of primes is performed using the -G option. The desired |
| length of the primes may be specified by the -b option. For example: |
| |
| # ssh-keygen -G moduli-2048.candidates -b 2048 |
| |
| By default, the search for primes begins at a random point in the desired |
| length range. This may be overridden using the -S option, which |
| specifies a different start point (in hex). |
| |
| Once a set of candidates have been generated, they must be tested for |
| suitability. This may be performed using the -T option. In this mode |
| ssh-keygen will read candidates from standard input (or a file specified |
| using the -f option). For example: |
| |
| # ssh-keygen -T moduli-2048 -f moduli-2048.candidates |
| |
| By default, each candidate will be subjected to 100 primality tests. |
| This may be overridden using the -a option. The DH generator value will |
| be chosen automatically for the prime under consideration. If a specific |
| generator is desired, it may be requested using the -W option. Valid |
| generator values are 2, 3, and 5. |
| |
| Screened DH groups may be installed in /etc/moduli. It is important that |
| this file contains moduli of a range of bit lengths and that both ends of |
| a connection share common moduli. |
| |
| CERTIFICATES |
| ssh-keygen supports signing of keys to produce certificates that may be |
| used for user or host authentication. Certificates consist of a public |
| key, some identity information, zero or more principal (user or host) |
| names and a set of options that are signed by a Certification Authority |
| (CA) key. Clients or servers may then trust only the CA key and verify |
| its signature on a certificate rather than trusting many user/host keys. |
| Note that OpenSSH certificates are a different, and much simpler, format |
| to the X.509 certificates used in ssl(8). |
| |
| ssh-keygen supports two types of certificates: user and host. User |
| certificates authenticate users to servers, whereas host certificates |
| authenticate server hosts to users. To generate a user certificate: |
| |
| $ ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub |
| |
| The resultant certificate will be placed in /path/to/user_key-cert.pub. |
| A host certificate requires the -h option: |
| |
| $ ssh-keygen -s /path/to/ca_key -I key_id -h /path/to/host_key.pub |
| |
| The host certificate will be output to /path/to/host_key-cert.pub. |
| |
| It is possible to sign using a CA key stored in a PKCS#11 token by |
| providing the token library using -D and identifying the CA key by |
| providing its public half as an argument to -s: |
| |
| $ ssh-keygen -s ca_key.pub -D libpkcs11.so -I key_id host_key.pub |
| |
| In all cases, key_id is a "key identifier" that is logged by the server |
| when the certificate is used for authentication. |
| |
| Certificates may be limited to be valid for a set of principal |
| (user/host) names. By default, generated certificates are valid for all |
| users or hosts. To generate a certificate for a specified set of |
| principals: |
| |
| $ ssh-keygen -s ca_key -I key_id -n user1,user2 user_key.pub |
| $ ssh-keygen -s ca_key -I key_id -h -n host.domain user_key.pub |
| |
| Additional limitations on the validity and use of user certificates may |
| be specified through certificate options. A certificate option may |
| disable features of the SSH session, may be valid only when presented |
| from particular source addresses or may force the use of a specific |
| command. For a list of valid certificate options, see the documentation |
| for the -O option above. |
| |
| Finally, certificates may be defined with a validity lifetime. The -V |
| option allows specification of certificate start and end times. A |
| certificate that is presented at a time outside this range will not be |
| considered valid. By default, certificates have a maximum validity |
| interval. |
| |
| For certificates to be used for user or host authentication, the CA |
| public key must be trusted by sshd(8) or ssh(1). Please refer to those |
| manual pages for details. |
| |
| FILES |
| ~/.ssh/identity |
| Contains the protocol version 1 RSA authentication identity of |
| the user. This file should not be readable by anyone but the |
| user. It is possible to specify a passphrase when generating the |
| key; that passphrase will be used to encrypt the private part of |
| this file using 3DES. This file is not automatically accessed by |
| ssh-keygen but it is offered as the default file for the private |
| key. ssh(1) will read this file when a login attempt is made. |
| |
| ~/.ssh/identity.pub |
| Contains the protocol version 1 RSA public key for |
| authentication. The contents of this file should be added to |
| ~/.ssh/authorized_keys on all machines where the user wishes to |
| log in using RSA authentication. There is no need to keep the |
| contents of this file secret. |
| |
| ~/.ssh/id_dsa |
| ~/.ssh/id_ecdsa |
| ~/.ssh/id_rsa |
| Contains the protocol version 2 DSA, ECDSA or RSA authentication |
| identity of the user. This file should not be readable by anyone |
| but the user. It is possible to specify a passphrase when |
| generating the key; that passphrase will be used to encrypt the |
| private part of this file using 128-bit AES. This file is not |
| automatically accessed by ssh-keygen but it is offered as the |
| default file for the private key. ssh(1) will read this file |
| when a login attempt is made. |
| |
| ~/.ssh/id_dsa.pub |
| ~/.ssh/id_ecdsa.pub |
| ~/.ssh/id_rsa.pub |
| Contains the protocol version 2 DSA, ECDSA or RSA public key for |
| authentication. The contents of this file should be added to |
| ~/.ssh/authorized_keys on all machines where the user wishes to |
| log in using public key authentication. There is no need to keep |
| the contents of this file secret. |
| |
| /etc/moduli |
| Contains Diffie-Hellman groups used for DH-GEX. The file format |
| is described in moduli(5). |
| |
| SEE ALSO |
| ssh(1), ssh-add(1), ssh-agent(1), moduli(5), sshd(8) |
| |
| The Secure Shell (SSH) Public Key File Format, RFC 4716, 2006. |
| |
| AUTHORS |
| OpenSSH is a derivative of the original and free ssh 1.2.12 release by |
| Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo |
| de Raadt and Dug Song removed many bugs, re-added newer features and |
| created OpenSSH. Markus Friedl contributed the support for SSH protocol |
| versions 1.5 and 2.0. |
| |
| OpenBSD 5.0 October 16, 2011 OpenBSD 5.0 |