123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218 |
- .\" $OpenBSD: ssh-keygen.1,v 1.209 2020/09/09 03:08:01 djm Exp $
- .\"
- .\" Author: Tatu Ylonen <ylo@cs.hut.fi>
- .\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
- .\" All rights reserved
- .\"
- .\" As far as I am concerned, the code I have written for this software
- .\" can be used freely for any purpose. Any derived versions of this
- .\" software must be clearly marked as such, and if the derived work is
- .\" incompatible with the protocol description in the RFC file, it must be
- .\" called by a name other than "ssh" or "Secure Shell".
- .\"
- .\"
- .\" Copyright (c) 1999,2000 Markus Friedl. All rights reserved.
- .\" Copyright (c) 1999 Aaron Campbell. All rights reserved.
- .\" Copyright (c) 1999 Theo de Raadt. All rights reserved.
- .\"
- .\" Redistribution and use in source and binary forms, with or without
- .\" modification, are permitted provided that the following conditions
- .\" are met:
- .\" 1. Redistributions of source code must retain the above copyright
- .\" notice, this list of conditions and the following disclaimer.
- .\" 2. Redistributions in binary form must reproduce the above copyright
- .\" notice, this list of conditions and the following disclaimer in the
- .\" documentation and/or other materials provided with the distribution.
- .\"
- .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- .\"
- .Dd $Mdocdate: November 27 2020 $
- .Dt SSH-KEYGEN 1
- .Os
- .Sh NAME
- .Nm ssh-keygen
- .Nd OpenSSH authentication key utility
- .Sh SYNOPSIS
- .Nm ssh-keygen
- .Op Fl q
- .Op Fl a Ar rounds
- .Op Fl b Ar bits
- .Op Fl C Ar comment
- .Op Fl f Ar output_keyfile
- .Op Fl m Ar format
- .Op Fl N Ar new_passphrase
- .Op Fl O Ar option
- .Op Fl t Cm dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
- .Op Fl w Ar provider
- .Op Fl Z Ar cipher
- .Nm ssh-keygen
- .Fl p
- .Op Fl a Ar rounds
- .Op Fl f Ar keyfile
- .Op Fl m Ar format
- .Op Fl N Ar new_passphrase
- .Op Fl P Ar old_passphrase
- .Op Fl Z Ar cipher
- .Nm ssh-keygen
- .Fl i
- .Op Fl f Ar input_keyfile
- .Op Fl m Ar key_format
- .Nm ssh-keygen
- .Fl e
- .Op Fl f Ar input_keyfile
- .Op Fl m Ar key_format
- .Nm ssh-keygen
- .Fl y
- .Op Fl f Ar input_keyfile
- .Nm ssh-keygen
- .Fl c
- .Op Fl a Ar rounds
- .Op Fl C Ar comment
- .Op Fl f Ar keyfile
- .Op Fl P Ar passphrase
- .Nm ssh-keygen
- .Fl l
- .Op Fl v
- .Op Fl E Ar fingerprint_hash
- .Op Fl f Ar input_keyfile
- .Nm ssh-keygen
- .Fl B
- .Op Fl f Ar input_keyfile
- .Nm ssh-keygen
- .Fl D Ar pkcs11
- .Nm ssh-keygen
- .Fl F Ar hostname
- .Op Fl lv
- .Op Fl f Ar known_hosts_file
- .Nm ssh-keygen
- .Fl H
- .Op Fl f Ar known_hosts_file
- .Nm ssh-keygen
- .Fl K
- .Op Fl a Ar rounds
- .Op Fl w Ar provider
- .Nm ssh-keygen
- .Fl R Ar hostname
- .Op Fl f Ar known_hosts_file
- .Nm ssh-keygen
- .Fl r Ar hostname
- .Op Fl g
- .Op Fl f Ar input_keyfile
- .Nm ssh-keygen
- .Fl M Cm generate
- .Op Fl O Ar option
- .Ar output_file
- .Nm ssh-keygen
- .Fl M Cm screen
- .Op Fl f Ar input_file
- .Op Fl O Ar option
- .Ar output_file
- .Nm ssh-keygen
- .Fl I Ar certificate_identity
- .Fl s Ar ca_key
- .Op Fl hU
- .Op Fl D Ar pkcs11_provider
- .Op Fl n Ar principals
- .Op Fl O Ar option
- .Op Fl V Ar validity_interval
- .Op Fl z Ar serial_number
- .Ar
- .Nm ssh-keygen
- .Fl L
- .Op Fl f Ar input_keyfile
- .Nm ssh-keygen
- .Fl A
- .Op Fl a Ar rounds
- .Op Fl f Ar prefix_path
- .Nm ssh-keygen
- .Fl k
- .Fl f Ar krl_file
- .Op Fl u
- .Op Fl s Ar ca_public
- .Op Fl z Ar version_number
- .Ar
- .Nm ssh-keygen
- .Fl Q
- .Op Fl l
- .Fl f Ar krl_file
- .Ar
- .Nm ssh-keygen
- .Fl Y Cm find-principals
- .Fl s Ar signature_file
- .Fl f Ar allowed_signers_file
- .Nm ssh-keygen
- .Fl Y Cm check-novalidate
- .Fl n Ar namespace
- .Fl s Ar signature_file
- .Nm ssh-keygen
- .Fl Y Cm sign
- .Fl f Ar key_file
- .Fl n Ar namespace
- .Ar
- .Nm ssh-keygen
- .Fl Y Cm verify
- .Fl f Ar allowed_signers_file
- .Fl I Ar signer_identity
- .Fl n Ar namespace
- .Fl s Ar signature_file
- .Op Fl r Ar revocation_file
- .Sh DESCRIPTION
- .Nm
- generates, manages and converts authentication keys for
- .Xr ssh 1 .
- .Nm
- can create keys for use by SSH protocol version 2.
- .Pp
- The type of key to be generated is specified with the
- .Fl t
- option.
- If invoked without any arguments,
- .Nm
- will generate an RSA key.
- .Pp
- .Nm
- is also used to generate groups for use in Diffie-Hellman group
- exchange (DH-GEX).
- See the
- .Sx MODULI GENERATION
- section for details.
- .Pp
- Finally,
- .Nm
- can be used to generate and update Key Revocation Lists, and to test whether
- given keys have been revoked by one.
- See the
- .Sx KEY REVOCATION LISTS
- section for details.
- .Pp
- Normally each user wishing to use SSH
- with public key authentication runs this once to create the authentication
- key in
- .Pa ~/.ssh/id_dsa ,
- .Pa ~/.ssh/id_ecdsa ,
- .Pa ~/.ssh/id_ecdsa_sk ,
- .Pa ~/.ssh/id_ed25519 ,
- .Pa ~/.ssh/id_ed25519_sk
- or
- .Pa ~/.ssh/id_rsa .
- Additionally, the system administrator may use this to generate host keys.
- .Pp
- 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
- .Dq .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
- .Fl p
- option.
- .Pp
- 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.
- .Pp
- .Nm
- will by default write keys in an OpenSSH-specific format.
- This format is preferred as it offers better protection for
- keys at rest as well as allowing storage of key comments within
- the private key file itself.
- The key comment may be useful to help identify the key.
- The comment is initialized to
- .Dq user@host
- when the key is created, but can be changed using the
- .Fl c
- option.
- .Pp
- It is still possible for
- .Nm
- to write the previously-used PEM format private keys using the
- .Fl m
- flag.
- This may be used when generating new keys, and existing new-format
- keys may be converted using this option in conjunction with the
- .Fl p
- (change passphrase) flag.
- .Pp
- After a key is generated,
- .Nm
- will ask where the keys
- should be placed to be activated.
- .Pp
- The options are as follows:
- .Bl -tag -width Ds
- .It Fl A
- For each of the key types (rsa, dsa, ecdsa and ed25519)
- 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.
- If
- .Fl f
- has also been specified, its argument is used as a prefix to the
- default path for the resulting host key files.
- This is used by system administration scripts to generate new host keys.
- .It Fl a Ar rounds
- When saving a private key, this option specifies the number of KDF
- (key derivation function) rounds used.
- Higher numbers result in slower passphrase verification and increased
- resistance to brute-force password cracking (should the keys be stolen).
- The default is 16 rounds.
- .It Fl B
- Show the bubblebabble digest of specified private or public key file.
- .It Fl b Ar bits
- Specifies the number of bits in the key to create.
- For RSA keys, the minimum size is 1024 bits and the default is 3072 bits.
- Generally, 3072 bits is considered sufficient.
- DSA keys must be exactly 1024 bits as specified by FIPS 186-2.
- For ECDSA keys, the
- .Fl 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.
- ECDSA-SK, Ed25519 and Ed25519-SK keys have a fixed length and the
- .Fl b
- flag will be ignored.
- .It Fl C Ar comment
- Provides a new comment.
- .It Fl c
- Requests changing the comment in the private and public key files.
- The program will prompt for the file containing the private keys, for
- the passphrase if the key has one, and for the new comment.
- .It Fl D Ar pkcs11
- Download the public keys provided by the PKCS#11 shared library
- .Ar pkcs11 .
- When used in combination with
- .Fl s ,
- this option indicates that a CA key resides in a PKCS#11 token (see the
- .Sx CERTIFICATES
- section for details).
- .It Fl E Ar fingerprint_hash
- Specifies the hash algorithm used when displaying key fingerprints.
- Valid options are:
- .Dq md5
- and
- .Dq sha256 .
- The default is
- .Dq sha256 .
- .It Fl e
- This option will read a private or public OpenSSH key file and
- print to stdout a public key in one of the formats specified by the
- .Fl m
- option.
- The default export format is
- .Dq RFC4716 .
- This option allows exporting OpenSSH keys for use by other programs, including
- several commercial SSH implementations.
- .It Fl F Ar hostname | [hostname]:port
- Search for the specified
- .Ar hostname
- (with optional port number)
- in a
- .Pa 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
- .Fl H
- option to print found keys in a hashed format.
- .It Fl f Ar filename
- Specifies the filename of the key file.
- .It Fl g
- Use generic DNS format when printing fingerprint resource records using the
- .Fl r
- command.
- .It Fl H
- Hash a
- .Pa 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
- .Nm ssh
- and
- .Nm 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.
- .It Fl h
- When signing a key, create a host certificate instead of a user
- certificate.
- Please see the
- .Sx CERTIFICATES
- section for details.
- .It Fl I Ar certificate_identity
- Specify the key identity when signing a public key.
- Please see the
- .Sx CERTIFICATES
- section for details.
- .It Fl i
- This option will read an unencrypted private (or public) key file
- in the format specified by the
- .Fl 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
- .Dq RFC4716 .
- .It Fl K
- Download resident keys from a FIDO authenticator.
- Public and private key files will be written to the current directory for
- each downloaded key.
- If multiple FIDO authenticators are attached, keys will be downloaded from
- the first touched authenticator.
- .It Fl k
- Generate a KRL file.
- In this mode,
- .Nm
- will generate a KRL file at the location specified via the
- .Fl f
- flag that revokes every key or certificate presented on the command line.
- Keys/certificates to be revoked may be specified by public key file or
- using the format described in the
- .Sx KEY REVOCATION LISTS
- section.
- .It Fl L
- Prints the contents of one or more certificates.
- .It Fl l
- Show fingerprint of specified public key file.
- For RSA and DSA keys
- .Nm
- tries to find the matching public key file and prints its fingerprint.
- If combined with
- .Fl v ,
- a visual ASCII art representation of the key is supplied with the
- fingerprint.
- .It Fl M Cm generate
- Generate candidate Diffie-Hellman Group Exchange (DH-GEX) parameters for
- eventual use by the
- .Sq diffie-hellman-group-exchange-*
- key exchange methods.
- The numbers generated by this operation must be further screened before
- use.
- See the
- .Sx MODULI GENERATION
- section for more information.
- .It Fl M Cm screen
- Screen candidate parameters for Diffie-Hellman Group Exchange.
- This will accept a list of candidate numbers and test that they are
- safe (Sophie Germain) primes with acceptable group generators.
- The results of this operation may be added to the
- .Pa /etc/moduli
- file.
- See the
- .Sx MODULI GENERATION
- section for more information.
- .It Fl m Ar key_format
- Specify a key format for key generation, the
- .Fl i
- (import),
- .Fl e
- (export) conversion options, and the
- .Fl p
- change passphrase operation.
- The latter may be used to convert between OpenSSH private key and PEM
- private key formats.
- The supported key formats are:
- .Dq RFC4716
- (RFC 4716/SSH2 public or private key),
- .Dq PKCS8
- (PKCS8 public or private key)
- or
- .Dq PEM
- (PEM public key).
- By default OpenSSH will write newly-generated private keys in its own
- format, but when converting public keys for export the default format is
- .Dq RFC4716 .
- Setting a format of
- .Dq PEM
- when generating or updating a supported private key type will cause the
- key to be stored in the legacy PEM private key format.
- .It Fl N Ar new_passphrase
- Provides the new passphrase.
- .It Fl n Ar 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
- .Sx CERTIFICATES
- section for details.
- .It Fl O Ar option
- Specify a key/value option.
- These are specific to the operation that
- .Nm
- has been requested to perform.
- .Pp
- When signing certificates, one of the options listed in the
- .Sx CERTIFICATES
- section may be specified here.
- .Pp
- When performing moduli generation or screening, one of the options
- listed in the
- .Sx MODULI GENERATION
- section may be specified.
- .Pp
- When generating a key that will be hosted on a FIDO authenticator,
- this flag may be used to specify key-specific options.
- Those supported at present are:
- .Bl -tag -width Ds
- .It Cm application
- Override the default FIDO application/origin string of
- .Dq ssh: .
- This may be useful when generating host or domain-specific resident keys.
- The specified application string must begin with
- .Dq ssh: .
- .It Cm challenge Ns = Ns Ar path
- Specifies a path to a challenge string that will be passed to the
- FIDO token during key generation.
- The challenge string may be used as part of an out-of-band
- protocol for key enrollment
- (a random challenge is used by default).
- .It Cm device
- Explicitly specify a
- .Xr fido 4
- device to use, rather than letting the token middleware select one.
- .It Cm no-touch-required
- Indicate that the generated private key should not require touch
- events (user presence) when making signatures.
- Note that
- .Xr sshd 8
- will refuse such signatures by default, unless overridden via
- an authorized_keys option.
- .It Cm resident
- Indicate that the key should be stored on the FIDO authenticator itself.
- Resident keys may be supported on FIDO2 tokens and typically require that
- a PIN be set on the token prior to generation.
- Resident keys may be loaded off the token using
- .Xr ssh-add 1 .
- .It Cm user
- A username to be associated with a resident key,
- overriding the empty default username.
- Specifying a username may be useful when generating multiple resident keys
- for the same application name.
- .It Cm verify-required
- Indicate that this private key should require user verification for
- each signature.
- Not all FIDO tokens support this option.
- Currently PIN authentication is the only supported verification method,
- but other methods may be supported in the future.
- .It Cm write-attestation Ns = Ns Ar path
- May be used at key generation time to record the attestation data
- returned from FIDO tokens during key generation.
- Please note that this information is potentially sensitive.
- By default, this information is discarded.
- .El
- .Pp
- The
- .Fl O
- option may be specified multiple times.
- .It Fl P Ar passphrase
- Provides the (old) passphrase.
- .It Fl 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.
- .It Fl Q
- Test whether keys have been revoked in a KRL.
- If the
- .Fl l
- option is also specified then the contents of the KRL will be printed.
- .It Fl q
- Silence
- .Nm ssh-keygen .
- .It Fl R Ar hostname | [hostname]:port
- Removes all keys belonging to the specified
- .Ar hostname
- (with optional port number)
- from a
- .Pa known_hosts
- file.
- This option is useful to delete hashed hosts (see the
- .Fl H
- option above).
- .It Fl r Ar hostname
- Print the SSHFP fingerprint resource record named
- .Ar hostname
- for the specified public key file.
- .It Fl s Ar ca_key
- Certify (sign) a public key using the specified CA key.
- Please see the
- .Sx CERTIFICATES
- section for details.
- .Pp
- When generating a KRL,
- .Fl s
- specifies a path to a CA public key file used to revoke certificates directly
- by key ID or serial number.
- See the
- .Sx KEY REVOCATION LISTS
- section for details.
- .It Fl t Cm dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
- Specifies the type of key to create.
- The possible values are
- .Dq dsa ,
- .Dq ecdsa ,
- .Dq ecdsa-sk ,
- .Dq ed25519 ,
- .Dq ed25519-sk ,
- or
- .Dq rsa .
- .Pp
- This flag may also be used to specify the desired signature type when
- signing certificates using an RSA CA key.
- The available RSA signature variants are
- .Dq ssh-rsa
- (SHA1 signatures, not recommended),
- .Dq rsa-sha2-256 ,
- and
- .Dq rsa-sha2-512
- (the default).
- .It Fl U
- When used in combination with
- .Fl s ,
- this option indicates that a CA key resides in a
- .Xr ssh-agent 1 .
- See the
- .Sx CERTIFICATES
- section for more information.
- .It Fl u
- Update a KRL.
- When specified with
- .Fl k ,
- keys listed via the command line are added to the existing KRL rather than
- a new KRL being created.
- .It Fl V Ar 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.
- .Pp
- The start time may be specified as the string
- .Dq always
- to indicate the certificate has no specified start time,
- a date in YYYYMMDD format, a time in YYYYMMDDHHMM[SS] format,
- a relative time (to the current time) consisting of a minus sign followed by
- an interval in the format described in the
- TIME FORMATS section of
- .Xr sshd_config 5 .
- .Pp
- The end time may be specified as a YYYYMMDD date, a YYYYMMDDHHMM[SS] time,
- a relative time starting with a plus character or the string
- .Dq forever
- to indicate that the certificate has no expiry date.
- .Pp
- For example:
- .Dq +52w1d
- (valid from now to 52 weeks and one day from now),
- .Dq -4w:+4w
- (valid from four weeks ago to four weeks from now),
- .Dq 20100101123000:20110101123000
- (valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011),
- .Dq -1d:20110101
- (valid from yesterday to midnight, January 1st, 2011),
- .Dq -1m:forever
- (valid from one minute ago and never expiring).
- .It Fl v
- Verbose mode.
- Causes
- .Nm
- to print debugging messages about its progress.
- This is helpful for debugging moduli generation.
- Multiple
- .Fl v
- options increase the verbosity.
- The maximum is 3.
- .It Fl w Ar provider
- Specifies a path to a library that will be used when creating
- FIDO authenticator-hosted keys, overriding the default of using
- the internal USB HID support.
- .It Fl Y Cm find-principals
- Find the principal(s) associated with the public key of a signature,
- provided using the
- .Fl s
- flag in an authorized signers file provided using the
- .Fl f
- flag.
- The format of the allowed signers file is documented in the
- .Sx ALLOWED SIGNERS
- section below.
- If one or more matching principals are found, they are returned on
- standard output.
- .It Fl Y Cm check-novalidate
- Checks that a signature generated using
- .Nm
- .Fl Y Cm sign
- has a valid structure.
- This does not validate if a signature comes from an authorized signer.
- When testing a signature,
- .Nm
- accepts a message on standard input and a signature namespace using
- .Fl n .
- A file containing the corresponding signature must also be supplied using the
- .Fl s
- flag.
- Successful testing of the signature is signalled by
- .Nm
- returning a zero exit status.
- .It Fl Y Cm sign
- Cryptographically sign a file or some data using a SSH key.
- When signing,
- .Nm
- accepts zero or more files to sign on the command-line - if no files
- are specified then
- .Nm
- will sign data presented on standard input.
- Signatures are written to the path of the input file with
- .Dq .sig
- appended, or to standard output if the message to be signed was read from
- standard input.
- .Pp
- The key used for signing is specified using the
- .Fl f
- option and may refer to either a private key, or a public key with the private
- half available via
- .Xr ssh-agent 1 .
- An additional signature namespace, used to prevent signature confusion across
- different domains of use (e.g. file signing vs email signing) must be provided
- via the
- .Fl n
- flag.
- Namespaces are arbitrary strings, and may include:
- .Dq file
- for file signing,
- .Dq email
- for email signing.
- For custom uses, it is recommended to use names following a
- NAMESPACE@YOUR.DOMAIN pattern to generate unambiguous namespaces.
- .It Fl Y Cm verify
- Request to verify a signature generated using
- .Nm
- .Fl Y Cm sign
- as described above.
- When verifying a signature,
- .Nm
- accepts a message on standard input and a signature namespace using
- .Fl n .
- A file containing the corresponding signature must also be supplied using the
- .Fl s
- flag, along with the identity of the signer using
- .Fl I
- and a list of allowed signers via the
- .Fl f
- flag.
- The format of the allowed signers file is documented in the
- .Sx ALLOWED SIGNERS
- section below.
- A file containing revoked keys can be passed using the
- .Fl r
- flag.
- The revocation file may be a KRL or a one-per-line list of public keys.
- Successful verification by an authorized signer is signalled by
- .Nm
- returning a zero exit status.
- .It Fl y
- This option will read a private
- OpenSSH format file and print an OpenSSH public key to stdout.
- .It Fl Z Ar cipher
- Specifies the cipher to use for encryption when writing an OpenSSH-format
- private key file.
- The list of available ciphers may be obtained using
- .Qq ssh -Q cipher .
- The default is
- .Dq aes256-ctr .
- .It Fl z Ar serial_number
- Specifies a serial number to be embedded in the certificate to distinguish
- this certificate from others from the same CA.
- If the
- .Ar serial_number
- is prefixed with a
- .Sq +
- character, then the serial number will be incremented for each certificate
- signed on a single command-line.
- The default serial number is zero.
- .Pp
- When generating a KRL, the
- .Fl z
- flag is used to specify a KRL version number.
- .El
- .Sh MODULI GENERATION
- .Nm
- 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).
- .Pp
- Generation of primes is performed using the
- .Fl M Cm generate
- option.
- The desired length of the primes may be specified by the
- .Fl O Cm bits
- option.
- For example:
- .Pp
- .Dl # ssh-keygen -M generate -O bits=2048 moduli-2048.candidates
- .Pp
- By default, the search for primes begins at a random point in the
- desired length range.
- This may be overridden using the
- .Fl O Cm start
- option, which specifies a different start point (in hex).
- .Pp
- Once a set of candidates have been generated, they must be screened for
- suitability.
- This may be performed using the
- .Fl M Cm screen
- option.
- In this mode
- .Nm
- will read candidates from standard input (or a file specified using the
- .Fl f
- option).
- For example:
- .Pp
- .Dl # ssh-keygen -M screen -f moduli-2048.candidates moduli-2048
- .Pp
- By default, each candidate will be subjected to 100 primality tests.
- This may be overridden using the
- .Fl O Cm prime-tests
- 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
- .Fl O Cm generator
- option.
- Valid generator values are 2, 3, and 5.
- .Pp
- Screened DH groups may be installed in
- .Pa /etc/ssh/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.
- .Pp
- A number of options are available for moduli generation and screening via the
- .Fl O
- flag:
- .Bl -tag -width Ds
- .It Ic lines Ns = Ns Ar number
- Exit after screening the specified number of lines while performing DH
- candidate screening.
- .It Ic start-line Ns = Ns Ar line-number
- Start screening at the specified line number while performing DH candidate
- screening.
- .It Ic checkpoint Ns = Ns Ar filename
- Write the last line processed to the specified file while performing DH
- candidate screening.
- This will be used to skip lines in the input file that have already been
- processed if the job is restarted.
- .It Ic memory Ns = Ns Ar mbytes
- Specify the amount of memory to use (in megabytes) when generating
- candidate moduli for DH-GEX.
- .It Ic start Ns = Ns Ar hex-value
- Specify start point (in hex) when generating candidate moduli for DH-GEX.
- .It Ic generator Ns = Ns Ar value
- Specify desired generator (in decimal) when testing candidate moduli for DH-GEX.
- .El
- .Sh CERTIFICATES
- .Nm
- 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
- .Xr ssl 8 .
- .Pp
- .Nm
- 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:
- .Pp
- .Dl $ ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub
- .Pp
- The resultant certificate will be placed in
- .Pa /path/to/user_key-cert.pub .
- A host certificate requires the
- .Fl h
- option:
- .Pp
- .Dl $ ssh-keygen -s /path/to/ca_key -I key_id -h /path/to/host_key.pub
- .Pp
- The host certificate will be output to
- .Pa /path/to/host_key-cert.pub .
- .Pp
- It is possible to sign using a CA key stored in a PKCS#11 token by
- providing the token library using
- .Fl D
- and identifying the CA key by providing its public half as an argument
- to
- .Fl s :
- .Pp
- .Dl $ ssh-keygen -s ca_key.pub -D libpkcs11.so -I key_id user_key.pub
- .Pp
- Similarly, it is possible for the CA key to be hosted in a
- .Xr ssh-agent 1 .
- This is indicated by the
- .Fl U
- flag and, again, the CA key must be identified by its public half.
- .Pp
- .Dl $ ssh-keygen -Us ca_key.pub -I key_id user_key.pub
- .Pp
- In all cases,
- .Ar key_id
- is a "key identifier" that is logged by the server when the certificate
- is used for authentication.
- .Pp
- 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:
- .Pp
- .Dl $ ssh-keygen -s ca_key -I key_id -n user1,user2 user_key.pub
- .Dl "$ ssh-keygen -s ca_key -I key_id -h -n host.domain host_key.pub"
- .Pp
- 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.
- .Pp
- The options that are valid for user certificates are:
- .Pp
- .Bl -tag -width Ds -compact
- .It Ic clear
- Clear all enabled permissions.
- This is useful for clearing the default set of permissions so permissions may
- be added individually.
- .Pp
- .It Ic critical : Ns Ar name Ns Op Ns = Ns Ar contents
- .It Ic extension : Ns Ar name Ns Op Ns = Ns Ar contents
- Includes an arbitrary certificate critical option or extension.
- The specified
- .Ar name
- should include a domain suffix, e.g.\&
- .Dq name@example.com .
- If
- .Ar contents
- is specified then it is included as the contents of the extension/option
- encoded as a string, otherwise the extension/option is created with no
- contents (usually indicating a flag).
- Extensions may be ignored by a client or server that does not recognise them,
- whereas unknown critical options will cause the certificate to be refused.
- .Pp
- .It Ic force-command Ns = Ns Ar command
- Forces the execution of
- .Ar command
- instead of any shell or command specified by the user when
- the certificate is used for authentication.
- .Pp
- .It Ic no-agent-forwarding
- Disable
- .Xr ssh-agent 1
- forwarding (permitted by default).
- .Pp
- .It Ic no-port-forwarding
- Disable port forwarding (permitted by default).
- .Pp
- .It Ic no-pty
- Disable PTY allocation (permitted by default).
- .Pp
- .It Ic no-user-rc
- Disable execution of
- .Pa ~/.ssh/rc
- by
- .Xr sshd 8
- (permitted by default).
- .Pp
- .It Ic no-x11-forwarding
- Disable X11 forwarding (permitted by default).
- .Pp
- .It Ic permit-agent-forwarding
- Allows
- .Xr ssh-agent 1
- forwarding.
- .Pp
- .It Ic permit-port-forwarding
- Allows port forwarding.
- .Pp
- .It Ic permit-pty
- Allows PTY allocation.
- .Pp
- .It Ic permit-user-rc
- Allows execution of
- .Pa ~/.ssh/rc
- by
- .Xr sshd 8 .
- .Pp
- .It Ic permit-X11-forwarding
- Allows X11 forwarding.
- .Pp
- .It Ic no-touch-required
- Do not require signatures made using this key include demonstration
- of user presence (e.g. by having the user touch the authenticator).
- This option only makes sense for the FIDO authenticator algorithms
- .Cm ecdsa-sk
- and
- .Cm ed25519-sk .
- .Pp
- .It Ic source-address Ns = Ns Ar address_list
- Restrict the source addresses from which the certificate is considered valid.
- The
- .Ar address_list
- is a comma-separated list of one or more address/netmask pairs in CIDR
- format.
- .Pp
- .It Ic verify-required
- Require signatures made using this key indicate that the user was first
- verified.
- This option only makes sense for the FIDO authenticator algorithms
- .Cm ecdsa-sk
- and
- .Cm ed25519-sk .
- Currently PIN authentication is the only supported verification method,
- but other methods may be supported in the future.
- .El
- .Pp
- At present, no standard options are valid for host keys.
- .Pp
- Finally, certificates may be defined with a validity lifetime.
- The
- .Fl 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 are valid from the
- .Ux
- Epoch to the distant future.
- .Pp
- For certificates to be used for user or host authentication, the CA
- public key must be trusted by
- .Xr sshd 8
- or
- .Xr ssh 1 .
- Please refer to those manual pages for details.
- .Sh KEY REVOCATION LISTS
- .Nm
- is able to manage OpenSSH format Key Revocation Lists (KRLs).
- These binary files specify keys or certificates to be revoked using a
- compact format, taking as little as one bit per certificate if they are being
- revoked by serial number.
- .Pp
- KRLs may be generated using the
- .Fl k
- flag.
- This option reads one or more files from the command line and generates a new
- KRL.
- The files may either contain a KRL specification (see below) or public keys,
- listed one per line.
- Plain public keys are revoked by listing their hash or contents in the KRL and
- certificates revoked by serial number or key ID (if the serial is zero or
- not available).
- .Pp
- Revoking keys using a KRL specification offers explicit control over the
- types of record used to revoke keys and may be used to directly revoke
- certificates by serial number or key ID without having the complete original
- certificate on hand.
- A KRL specification consists of lines containing one of the following directives
- followed by a colon and some directive-specific information.
- .Bl -tag -width Ds
- .It Cm serial : Ar serial_number Ns Op - Ns Ar serial_number
- Revokes a certificate with the specified serial number.
- Serial numbers are 64-bit values, not including zero and may be expressed
- in decimal, hex or octal.
- If two serial numbers are specified separated by a hyphen, then the range
- of serial numbers including and between each is revoked.
- The CA key must have been specified on the
- .Nm
- command line using the
- .Fl s
- option.
- .It Cm id : Ar key_id
- Revokes a certificate with the specified key ID string.
- The CA key must have been specified on the
- .Nm
- command line using the
- .Fl s
- option.
- .It Cm key : Ar public_key
- Revokes the specified key.
- If a certificate is listed, then it is revoked as a plain public key.
- .It Cm sha1 : Ar public_key
- Revokes the specified key by including its SHA1 hash in the KRL.
- .It Cm sha256 : Ar public_key
- Revokes the specified key by including its SHA256 hash in the KRL.
- KRLs that revoke keys by SHA256 hash are not supported by OpenSSH versions
- prior to 7.9.
- .It Cm hash : Ar fingerprint
- Revokes a key using a fingerprint hash, as obtained from a
- .Xr sshd 8
- authentication log message or the
- .Nm
- .Fl l
- flag.
- Only SHA256 fingerprints are supported here and resultant KRLs are
- not supported by OpenSSH versions prior to 7.9.
- .El
- .Pp
- KRLs may be updated using the
- .Fl u
- flag in addition to
- .Fl k .
- When this option is specified, keys listed via the command line are merged into
- the KRL, adding to those already there.
- .Pp
- It is also possible, given a KRL, to test whether it revokes a particular key
- (or keys).
- The
- .Fl Q
- flag will query an existing KRL, testing each key specified on the command line.
- If any key listed on the command line has been revoked (or an error encountered)
- then
- .Nm
- will exit with a non-zero exit status.
- A zero exit status will only be returned if no key was revoked.
- .Sh ALLOWED SIGNERS
- When verifying signatures,
- .Nm
- uses a simple list of identities and keys to determine whether a signature
- comes from an authorized source.
- This "allowed signers" file uses a format patterned after the
- AUTHORIZED_KEYS FILE FORMAT described in
- .Xr sshd 8 .
- Each line of the file contains the following space-separated fields:
- principals, options, keytype, base64-encoded key.
- Empty lines and lines starting with a
- .Ql #
- are ignored as comments.
- .Pp
- The principals field is a pattern-list (see PATTERNS in
- .Xr ssh_config 5 )
- consisting of one or more comma-separated USER@DOMAIN identity patterns
- that are accepted for signing.
- When verifying, the identity presented via the
- .Fl I
- option must match a principals pattern in order for the corresponding key to be
- considered acceptable for verification.
- .Pp
- The options (if present) consist of comma-separated option specifications.
- No spaces are permitted, except within double quotes.
- The following option specifications are supported (note that option keywords
- are case-insensitive):
- .Bl -tag -width Ds
- .It Cm cert-authority
- Indicates that this key is accepted as a certificate authority (CA) and
- that certificates signed by this CA may be accepted for verification.
- .It Cm namespaces="namespace-list"
- Specifies a pattern-list of namespaces that are accepted for this key.
- If this option is present, the signature namespace embedded in the
- signature object and presented on the verification command-line must
- match the specified list before the key will be considered acceptable.
- .El
- .Pp
- When verifying signatures made by certificates, the expected principal
- name must match both the principals pattern in the allowed signers file and
- the principals embedded in the certificate itself.
- .Pp
- An example allowed signers file:
- .Bd -literal -offset 3n
- # Comments allowed at start of line
- user1@example.com,user2@example.com ssh-rsa AAAAX1...
- # A certificate authority, trusted for all principals in a domain.
- *@example.com cert-authority ssh-ed25519 AAAB4...
- # A key that is accepted only for file signing.
- user2@example.com namespaces="file" ssh-ed25519 AAA41...
- .Ed
- .Sh ENVIRONMENT
- .Bl -tag -width Ds
- .It Ev SSH_SK_PROVIDER
- Specifies a path to a library that will be used when loading any
- FIDO authenticator-hosted keys, overriding the default of using
- the built-in USB HID support.
- .El
- .Sh FILES
- .Bl -tag -width Ds -compact
- .It Pa ~/.ssh/id_dsa
- .It Pa ~/.ssh/id_ecdsa
- .It Pa ~/.ssh/id_ecdsa_sk
- .It Pa ~/.ssh/id_ed25519
- .It Pa ~/.ssh/id_ed25519_sk
- .It Pa ~/.ssh/id_rsa
- Contains the DSA, ECDSA, authenticator-hosted ECDSA, Ed25519,
- authenticator-hosted Ed25519 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
- .Nm
- but it is offered as the default file for the private key.
- .Xr ssh 1
- will read this file when a login attempt is made.
- .Pp
- .It Pa ~/.ssh/id_dsa.pub
- .It Pa ~/.ssh/id_ecdsa.pub
- .It Pa ~/.ssh/id_ecdsa_sk.pub
- .It Pa ~/.ssh/id_ed25519.pub
- .It Pa ~/.ssh/id_ed25519_sk.pub
- .It Pa ~/.ssh/id_rsa.pub
- Contains the DSA, ECDSA, authenticator-hosted ECDSA, Ed25519,
- authenticator-hosted Ed25519 or RSA public key for authentication.
- The contents of this file should be added to
- .Pa ~/.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.
- .Pp
- .It Pa /etc/ssh/moduli
- Contains Diffie-Hellman groups used for DH-GEX.
- The file format is described in
- .Xr moduli 5 .
- .El
- .Sh SEE ALSO
- .Xr ssh 1 ,
- .Xr ssh-add 1 ,
- .Xr ssh-agent 1 ,
- .Xr moduli 5 ,
- .Xr sshd 8
- .Rs
- .%R RFC 4716
- .%T "The Secure Shell (SSH) Public Key File Format"
- .%D 2006
- .Re
- .Sh 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.
|