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]
                [-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 they 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.  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                     April 13, 2011                     OpenBSD 5.0
