1.\" $OpenBSD: ssh-keygen.1,v 1.202 2020/02/24 04:27:58 dtucker Exp $ 2.\" 3.\" Author: Tatu Ylonen <ylo@cs.hut.fi> 4.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 5.\" All rights reserved 6.\" 7.\" As far as I am concerned, the code I have written for this software 8.\" can be used freely for any purpose. Any derived versions of this 9.\" software must be clearly marked as such, and if the derived work is 10.\" incompatible with the protocol description in the RFC file, it must be 11.\" called by a name other than "ssh" or "Secure Shell". 12.\" 13.\" 14.\" Copyright (c) 1999,2000 Markus Friedl. All rights reserved. 15.\" Copyright (c) 1999 Aaron Campbell. All rights reserved. 16.\" Copyright (c) 1999 Theo de Raadt. All rights reserved. 17.\" 18.\" Redistribution and use in source and binary forms, with or without 19.\" modification, are permitted provided that the following conditions 20.\" are met: 21.\" 1. Redistributions of source code must retain the above copyright 22.\" notice, this list of conditions and the following disclaimer. 23.\" 2. Redistributions in binary form must reproduce the above copyright 24.\" notice, this list of conditions and the following disclaimer in the 25.\" documentation and/or other materials provided with the distribution. 26.\" 27.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 28.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 29.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 30.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 31.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 32.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 36.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37.\" 38.Dd $Mdocdate: February 24 2020 $ 39.Dt SSH-KEYGEN 1 40.Os 41.Sh NAME 42.Nm ssh-keygen 43.Nd OpenSSH authentication key utility 44.Sh SYNOPSIS 45.Nm ssh-keygen 46.Op Fl q 47.Op Fl b Ar bits 48.Op Fl C Ar comment 49.Op Fl f Ar output_keyfile 50.Op Fl m Ar format 51.Op Fl t Cm dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa 52.Op Fl N Ar new_passphrase 53.Op Fl O Ar option 54.Op Fl w Ar provider 55.Nm ssh-keygen 56.Fl p 57.Op Fl f Ar keyfile 58.Op Fl m Ar format 59.Op Fl N Ar new_passphrase 60.Op Fl P Ar old_passphrase 61.Nm ssh-keygen 62.Fl i 63.Op Fl f Ar input_keyfile 64.Op Fl m Ar key_format 65.Nm ssh-keygen 66.Fl e 67.Op Fl f Ar input_keyfile 68.Op Fl m Ar key_format 69.Nm ssh-keygen 70.Fl y 71.Op Fl f Ar input_keyfile 72.Nm ssh-keygen 73.Fl c 74.Op Fl C Ar comment 75.Op Fl f Ar keyfile 76.Op Fl P Ar passphrase 77.Nm ssh-keygen 78.Fl l 79.Op Fl v 80.Op Fl E Ar fingerprint_hash 81.Op Fl f Ar input_keyfile 82.Nm ssh-keygen 83.Fl B 84.Op Fl f Ar input_keyfile 85.Nm ssh-keygen 86.Fl D Ar pkcs11 87.Nm ssh-keygen 88.Fl F Ar hostname 89.Op Fl lv 90.Op Fl f Ar known_hosts_file 91.Nm ssh-keygen 92.Fl H 93.Op Fl f Ar known_hosts_file 94.Nm ssh-keygen 95.Fl K 96.Op Fl w Ar provider 97.Nm ssh-keygen 98.Fl R Ar hostname 99.Op Fl f Ar known_hosts_file 100.Nm ssh-keygen 101.Fl r Ar hostname 102.Op Fl g 103.Op Fl f Ar input_keyfile 104.Nm ssh-keygen 105.Fl M Cm generate 106.Op Fl O Ar option 107.Ar output_file 108.Nm ssh-keygen 109.Fl M Cm screen 110.Op Fl f Ar input_file 111.Op Fl O Ar option 112.Ar output_file 113.Nm ssh-keygen 114.Fl I Ar certificate_identity 115.Fl s Ar ca_key 116.Op Fl hU 117.Op Fl D Ar pkcs11_provider 118.Op Fl n Ar principals 119.Op Fl O Ar option 120.Op Fl V Ar validity_interval 121.Op Fl z Ar serial_number 122.Ar 123.Nm ssh-keygen 124.Fl L 125.Op Fl f Ar input_keyfile 126.Nm ssh-keygen 127.Fl A 128.Op Fl f Ar prefix_path 129.Nm ssh-keygen 130.Fl k 131.Fl f Ar krl_file 132.Op Fl u 133.Op Fl s Ar ca_public 134.Op Fl z Ar version_number 135.Ar 136.Nm ssh-keygen 137.Fl Q 138.Fl f Ar krl_file 139.Ar 140.Nm ssh-keygen 141.Fl Y Cm find-principals 142.Fl s Ar signature_file 143.Fl f Ar allowed_signers_file 144.Nm ssh-keygen 145.Fl Y Cm check-novalidate 146.Fl n Ar namespace 147.Fl s Ar signature_file 148.Nm ssh-keygen 149.Fl Y Cm sign 150.Fl f Ar key_file 151.Fl n Ar namespace 152.Ar 153.Nm ssh-keygen 154.Fl Y Cm verify 155.Fl f Ar allowed_signers_file 156.Fl I Ar signer_identity 157.Fl n Ar namespace 158.Fl s Ar signature_file 159.Op Fl r Ar revocation_file 160.Sh DESCRIPTION 161.Nm 162generates, manages and converts authentication keys for 163.Xr ssh 1 . 164.Nm 165can create keys for use by SSH protocol version 2. 166.Pp 167The type of key to be generated is specified with the 168.Fl t 169option. 170If invoked without any arguments, 171.Nm 172will generate an RSA key. 173.Pp 174.Nm 175is also used to generate groups for use in Diffie-Hellman group 176exchange (DH-GEX). 177See the 178.Sx MODULI GENERATION 179section for details. 180.Pp 181Finally, 182.Nm 183can be used to generate and update Key Revocation Lists, and to test whether 184given keys have been revoked by one. 185See the 186.Sx KEY REVOCATION LISTS 187section for details. 188.Pp 189Normally each user wishing to use SSH 190with public key authentication runs this once to create the authentication 191key in 192.Pa ~/.ssh/id_dsa , 193.Pa ~/.ssh/id_ecdsa , 194.Pa ~/.ssh/id_ecdsa_sk , 195.Pa ~/.ssh/id_ed25519 , 196.Pa ~/.ssh/id_ed25519_sk 197or 198.Pa ~/.ssh/id_rsa . 199Additionally, the system administrator may use this to generate host keys, 200as seen in 201.Pa /etc/rc . 202.Pp 203Normally this program generates the key and asks for a file in which 204to store the private key. 205The public key is stored in a file with the same name but 206.Dq .pub 207appended. 208The program also asks for a passphrase. 209The passphrase may be empty to indicate no passphrase 210(host keys must have an empty passphrase), or it may be a string of 211arbitrary length. 212A passphrase is similar to a password, except it can be a phrase with a 213series of words, punctuation, numbers, whitespace, or any string of 214characters you want. 215Good passphrases are 10-30 characters long, are 216not simple sentences or otherwise easily guessable (English 217prose has only 1-2 bits of entropy per character, and provides very bad 218passphrases), and contain a mix of upper and lowercase letters, 219numbers, and non-alphanumeric characters. 220The passphrase can be changed later by using the 221.Fl p 222option. 223.Pp 224There is no way to recover a lost passphrase. 225If the passphrase is lost or forgotten, a new key must be generated 226and the corresponding public key copied to other machines. 227.Pp 228.Nm 229will by default write keys in an OpenSSH-specific format. 230This format is preferred as it offers better protection for 231keys at rest as well as allowing storage of key comments within 232the private key file itself. 233The key comment may be useful to help identify the key. 234The comment is initialized to 235.Dq user@host 236when the key is created, but can be changed using the 237.Fl c 238option. 239.Pp 240It is still possible for 241.Nm 242to write the previously-used PEM format private keys using the 243.Fl m 244flag. 245This may be used when generating new keys, and existing new-format 246keys may be converted using this option in conjunction with the 247.Fl p 248(change passphrase) flag. 249.Pp 250After a key is generated, instructions below detail where the keys 251should be placed to be activated. 252.Pp 253The options are as follows: 254.Bl -tag -width Ds 255.It Fl A 256For each of the key types (rsa, dsa, ecdsa and ed25519) 257for which host keys 258do not exist, generate the host keys with the default key file path, 259an empty passphrase, default bits for the key type, and default comment. 260If 261.Fl f 262has also been specified, its argument is used as a prefix to the 263default path for the resulting host key files. 264This is used by 265.Pa /etc/rc 266to generate new host keys. 267.It Fl a Ar rounds 268When saving a private key, this option specifies the number of KDF 269(key derivation function) rounds used. 270Higher numbers result in slower passphrase verification and increased 271resistance to brute-force password cracking (should the keys be stolen). 272.It Fl B 273Show the bubblebabble digest of specified private or public key file. 274.It Fl b Ar bits 275Specifies the number of bits in the key to create. 276For RSA keys, the minimum size is 1024 bits and the default is 3072 bits. 277Generally, 3072 bits is considered sufficient. 278DSA keys must be exactly 1024 bits as specified by FIPS 186-2. 279For ECDSA keys, the 280.Fl b 281flag determines the key length by selecting from one of three elliptic 282curve sizes: 256, 384 or 521 bits. 283Attempting to use bit lengths other than these three values for ECDSA keys 284will fail. 285ECDSA-SK, Ed25519 and Ed25519-SK keys have a fixed length and the 286.Fl b 287flag will be ignored. 288.It Fl C Ar comment 289Provides a new comment. 290.It Fl c 291Requests changing the comment in the private and public key files. 292The program will prompt for the file containing the private keys, for 293the passphrase if the key has one, and for the new comment. 294.It Fl D Ar pkcs11 295Download the public keys provided by the PKCS#11 shared library 296.Ar pkcs11 . 297When used in combination with 298.Fl s , 299this option indicates that a CA key resides in a PKCS#11 token (see the 300.Sx CERTIFICATES 301section for details). 302.It Fl E Ar fingerprint_hash 303Specifies the hash algorithm used when displaying key fingerprints. 304Valid options are: 305.Dq md5 306and 307.Dq sha256 . 308The default is 309.Dq sha256 . 310.It Fl e 311This option will read a private or public OpenSSH key file and 312print to stdout a public key in one of the formats specified by the 313.Fl m 314option. 315The default export format is 316.Dq RFC4716 . 317This option allows exporting OpenSSH keys for use by other programs, including 318several commercial SSH implementations. 319.It Fl F Ar hostname | [hostname]:port 320Search for the specified 321.Ar hostname 322(with optional port number) 323in a 324.Pa known_hosts 325file, listing any occurrences found. 326This option is useful to find hashed host names or addresses and may also be 327used in conjunction with the 328.Fl H 329option to print found keys in a hashed format. 330.It Fl f Ar filename 331Specifies the filename of the key file. 332.It Fl g 333Use generic DNS format when printing fingerprint resource records using the 334.Fl r 335command. 336.It Fl H 337Hash a 338.Pa known_hosts 339file. 340This replaces all hostnames and addresses with hashed representations 341within the specified file; the original content is moved to a file with 342a .old suffix. 343These hashes may be used normally by 344.Nm ssh 345and 346.Nm sshd , 347but they do not reveal identifying information should the file's contents 348be disclosed. 349This option will not modify existing hashed hostnames and is therefore safe 350to use on files that mix hashed and non-hashed names. 351.It Fl h 352When signing a key, create a host certificate instead of a user 353certificate. 354Please see the 355.Sx CERTIFICATES 356section for details. 357.It Fl I Ar certificate_identity 358Specify the key identity when signing a public key. 359Please see the 360.Sx CERTIFICATES 361section for details. 362.It Fl i 363This option will read an unencrypted private (or public) key file 364in the format specified by the 365.Fl m 366option and print an OpenSSH compatible private 367(or public) key to stdout. 368This option allows importing keys from other software, including several 369commercial SSH implementations. 370The default import format is 371.Dq RFC4716 . 372.It Fl K 373Download resident keys from a FIDO authenticator. 374Public and private key files will be written to the current directory for 375each downloaded key. 376.It Fl k 377Generate a KRL file. 378In this mode, 379.Nm 380will generate a KRL file at the location specified via the 381.Fl f 382flag that revokes every key or certificate presented on the command line. 383Keys/certificates to be revoked may be specified by public key file or 384using the format described in the 385.Sx KEY REVOCATION LISTS 386section. 387.It Fl L 388Prints the contents of one or more certificates. 389.It Fl l 390Show fingerprint of specified public key file. 391For RSA and DSA keys 392.Nm 393tries to find the matching public key file and prints its fingerprint. 394If combined with 395.Fl v , 396a visual ASCII art representation of the key is supplied with the 397fingerprint. 398.It Fl M Cm generate 399Generate candidate Diffie-Hellman Group Exchange (DH-GEX) parameters for 400eventual use by the 401.Sq diffie-hellman-group-exchange-* 402key exchange methods. 403The numbers generated by this operation must be further screened before 404use. 405See the 406.Sx MODULI GENERATION 407section for more information. 408.It Fl M Cm screen 409Screen candidate parameters for Diffie-Hellman Group Exchange. 410This will accept a list of candidate numbers and test that they are 411safe (Sophie Germain) primes with acceptable group generators. 412The results of this operation may be added to the 413.Pa /etc/moduli 414file. 415See the 416.Sx MODULI GENERATION 417section for more information. 418.It Fl m Ar key_format 419Specify a key format for key generation, the 420.Fl i 421(import), 422.Fl e 423(export) conversion options, and the 424.Fl p 425change passphrase operation. 426The latter may be used to convert between OpenSSH private key and PEM 427private key formats. 428The supported key formats are: 429.Dq RFC4716 430(RFC 4716/SSH2 public or private key), 431.Dq PKCS8 432(PKCS8 public or private key) 433or 434.Dq PEM 435(PEM public key). 436By default OpenSSH will write newly-generated private keys in its own 437format, but when converting public keys for export the default format is 438.Dq RFC4716 . 439Setting a format of 440.Dq PEM 441when generating or updating a supported private key type will cause the 442key to be stored in the legacy PEM private key format. 443.It Fl N Ar new_passphrase 444Provides the new passphrase. 445.It Fl n Ar principals 446Specify one or more principals (user or host names) to be included in 447a certificate when signing a key. 448Multiple principals may be specified, separated by commas. 449Please see the 450.Sx CERTIFICATES 451section for details. 452.It Fl O Ar option 453Specify a key/value option. 454These are specific to the operation that 455.Nm 456has been requested to perform. 457.Pp 458When signing certificates, one of the options listed in the 459.Sx CERTIFICATES 460section may be specified here. 461.Pp 462When performing moduli generation or screening, one of the options 463listed in the 464.Sx MODULI GENERATION 465section may be specified. 466.Pp 467When generating a key that will be hosted on a FIDO authenticator, 468this flag may be used to specify key-specific options. 469Those supported at present are: 470.Bl -tag -width Ds 471.It Cm application 472Override the default FIDO application/origin string of 473.Dq ssh: . 474This may be useful when generating host or domain-specific resident keys. 475The specified application string must begin with 476.Dq ssh: . 477.It Cm challenge Ns = Ns Ar path 478Specifies a path to a challenge string that will be passed to the 479FIDO token during key generation. 480The challenge string may be used as part of an out-of-band 481protocol for key enrollment 482(a random challenge is used by default). 483.It Cm device 484Explicitly specify a 485.Xr fido 4 486device to use, rather than letting the token middleware select one. 487.It Cm no-touch-required 488Indicate that the generated private key should not require touch 489events (user presence) when making signatures. 490Note that 491.Xr sshd 8 492will refuse such signatures by default, unless overridden via 493an authorized_keys option. 494.It Cm resident 495Indicate that the key should be stored on the FIDO authenticator itself. 496Resident keys may be supported on FIDO2 tokens and typically require that 497a PIN be set on the token prior to generation. 498Resident keys may be loaded off the token using 499.Xr ssh-add 1 . 500.It Cm user 501A username to be associated with a resident key, 502overriding the empty default username. 503Specifying a username may be useful when generating multiple resident keys 504for the same application name. 505.It Cm write-attestation Ns = Ns Ar path 506May be used at key generation time to record the attestation certificate 507returned from FIDO tokens during key generation. 508By default this information is discarded. 509.El 510.Pp 511The 512.Fl O 513option may be specified multiple times. 514.It Fl P Ar passphrase 515Provides the (old) passphrase. 516.It Fl p 517Requests changing the passphrase of a private key file instead of 518creating a new private key. 519The program will prompt for the file 520containing the private key, for the old passphrase, and twice for the 521new passphrase. 522.It Fl Q 523Test whether keys have been revoked in a KRL. 524.It Fl q 525Silence 526.Nm ssh-keygen . 527.It Fl R Ar hostname | [hostname]:port 528Removes all keys belonging to the specified 529.Ar hostname 530(with optional port number) 531from a 532.Pa known_hosts 533file. 534This option is useful to delete hashed hosts (see the 535.Fl H 536option above). 537.It Fl r Ar hostname 538Print the SSHFP fingerprint resource record named 539.Ar hostname 540for the specified public key file. 541.It Fl s Ar ca_key 542Certify (sign) a public key using the specified CA key. 543Please see the 544.Sx CERTIFICATES 545section for details. 546.Pp 547When generating a KRL, 548.Fl s 549specifies a path to a CA public key file used to revoke certificates directly 550by key ID or serial number. 551See the 552.Sx KEY REVOCATION LISTS 553section for details. 554.It Fl t Cm dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa 555Specifies the type of key to create. 556The possible values are 557.Dq dsa , 558.Dq ecdsa , 559.Dq ecdsa-sk , 560.Dq ed25519 , 561.Dq ed25519-sk , 562or 563.Dq rsa . 564.Pp 565This flag may also be used to specify the desired signature type when 566signing certificates using an RSA CA key. 567The available RSA signature variants are 568.Dq ssh-rsa 569(SHA1 signatures, not recommended), 570.Dq rsa-sha2-256 , 571and 572.Dq rsa-sha2-512 573(the default). 574.It Fl U 575When used in combination with 576.Fl s , 577this option indicates that a CA key resides in a 578.Xr ssh-agent 1 . 579See the 580.Sx CERTIFICATES 581section for more information. 582.It Fl u 583Update a KRL. 584When specified with 585.Fl k , 586keys listed via the command line are added to the existing KRL rather than 587a new KRL being created. 588.It Fl V Ar validity_interval 589Specify a validity interval when signing a certificate. 590A validity interval may consist of a single time, indicating that the 591certificate is valid beginning now and expiring at that time, or may consist 592of two times separated by a colon to indicate an explicit time interval. 593.Pp 594The start time may be specified as the string 595.Dq always 596to indicate the certificate has no specified start time, 597a date in YYYYMMDD format, a time in YYYYMMDDHHMM[SS] format, 598a relative time (to the current time) consisting of a minus sign followed by 599an interval in the format described in the 600TIME FORMATS section of 601.Xr sshd_config 5 . 602.Pp 603The end time may be specified as a YYYYMMDD date, a YYYYMMDDHHMM[SS] time, 604a relative time starting with a plus character or the string 605.Dq forever 606to indicate that the certificate has no expiry date. 607.Pp 608For example: 609.Dq +52w1d 610(valid from now to 52 weeks and one day from now), 611.Dq -4w:+4w 612(valid from four weeks ago to four weeks from now), 613.Dq 20100101123000:20110101123000 614(valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011), 615.Dq -1d:20110101 616(valid from yesterday to midnight, January 1st, 2011). 617.Dq -1m:forever 618(valid from one minute ago and never expiring). 619.It Fl v 620Verbose mode. 621Causes 622.Nm 623to print debugging messages about its progress. 624This is helpful for debugging moduli generation. 625Multiple 626.Fl v 627options increase the verbosity. 628The maximum is 3. 629.It Fl w Ar provider 630Specifies a path to a library that will be used when creating 631FIDO authenticator-hosted keys, overriding the default of using 632the internal USB HID support. 633.It Fl Y Cm find-principals 634Find the principal(s) associated with the public key of a signature, 635provided using the 636.Fl s 637flag in an authorized signers file provided using the 638.Fl f 639flag. 640The format of the allowed signers file is documented in the 641.Sx ALLOWED SIGNERS 642section below. 643If one or more matching principals are found, they are returned on 644standard output. 645.It Fl Y Cm check-novalidate 646Checks that a signature generated using 647.Nm 648.Fl Y Cm sign 649has a valid structure. 650This does not validate if a signature comes from an authorized signer. 651When testing a signature, 652.Nm 653accepts a message on standard input and a signature namespace using 654.Fl n . 655A file containing the corresponding signature must also be supplied using the 656.Fl s 657flag. 658Successful testing of the signature is signalled by 659.Nm 660returning a zero exit status. 661.It Fl Y Cm sign 662Cryptographically sign a file or some data using a SSH key. 663When signing, 664.Nm 665accepts zero or more files to sign on the command-line - if no files 666are specified then 667.Nm 668will sign data presented on standard input. 669Signatures are written to the path of the input file with 670.Dq .sig 671appended, or to standard output if the message to be signed was read from 672standard input. 673.Pp 674The key used for signing is specified using the 675.Fl f 676option and may refer to either a private key, or a public key with the private 677half available via 678.Xr ssh-agent 1 . 679An additional signature namespace, used to prevent signature confusion across 680different domains of use (e.g. file signing vs email signing) must be provided 681via the 682.Fl n 683flag. 684Namespaces are arbitrary strings, and may include: 685.Dq file 686for file signing, 687.Dq email 688for email signing. 689For custom uses, it is recommended to use names following a 690NAMESPACE@YOUR.DOMAIN pattern to generate unambiguous namespaces. 691.It Fl Y Cm verify 692Request to verify a signature generated using 693.Nm 694.Fl Y Cm sign 695as described above. 696When verifying a signature, 697.Nm 698accepts a message on standard input and a signature namespace using 699.Fl n . 700A file containing the corresponding signature must also be supplied using the 701.Fl s 702flag, along with the identity of the signer using 703.Fl I 704and a list of allowed signers via the 705.Fl f 706flag. 707The format of the allowed signers file is documented in the 708.Sx ALLOWED SIGNERS 709section below. 710A file containing revoked keys can be passed using the 711.Fl r 712flag. 713The revocation file may be a KRL or a one-per-line list of public keys. 714Successful verification by an authorized signer is signalled by 715.Nm 716returning a zero exit status. 717.It Fl y 718This option will read a private 719OpenSSH format file and print an OpenSSH public key to stdout. 720.It Fl z Ar serial_number 721Specifies a serial number to be embedded in the certificate to distinguish 722this certificate from others from the same CA. 723If the 724.Ar serial_number 725is prefixed with a 726.Sq + 727character, then the serial number will be incremented for each certificate 728signed on a single command-line. 729The default serial number is zero. 730.Pp 731When generating a KRL, the 732.Fl z 733flag is used to specify a KRL version number. 734.El 735.Sh MODULI GENERATION 736.Nm 737may be used to generate groups for the Diffie-Hellman Group Exchange 738(DH-GEX) protocol. 739Generating these groups is a two-step process: first, candidate 740primes are generated using a fast, but memory intensive process. 741These candidate primes are then tested for suitability (a CPU-intensive 742process). 743.Pp 744Generation of primes is performed using the 745.Fl M Cm generate 746option. 747The desired length of the primes may be specified by the 748.Fl O Cm bits 749option. 750For example: 751.Pp 752.Dl # ssh-keygen -M generate -O bits=2048 moduli-2048.candidates 753.Pp 754By default, the search for primes begins at a random point in the 755desired length range. 756This may be overridden using the 757.Fl O Cm start 758option, which specifies a different start point (in hex). 759.Pp 760Once a set of candidates have been generated, they must be screened for 761suitability. 762This may be performed using the 763.Fl M Cm screen 764option. 765In this mode 766.Nm 767will read candidates from standard input (or a file specified using the 768.Fl f 769option). 770For example: 771.Pp 772.Dl # ssh-keygen -M screen -f moduli-2048.candidates moduli-2048 773.Pp 774By default, each candidate will be subjected to 100 primality tests. 775This may be overridden using the 776.Fl O Cm prime-tests 777option. 778The DH generator value will be chosen automatically for the 779prime under consideration. 780If a specific generator is desired, it may be requested using the 781.Fl O Cm generator 782option. 783Valid generator values are 2, 3, and 5. 784.Pp 785Screened DH groups may be installed in 786.Pa /etc/moduli . 787It is important that this file contains moduli of a range of bit lengths and 788that both ends of a connection share common moduli. 789.Pp 790A number of options are available for moduli generation and screening via the 791.Fl O 792flag: 793.Bl -tag -width Ds 794.It Ic lines Ns = Ns Ar number 795Exit after screening the specified number of lines while performing DH 796candidate screening. 797.It Ic start-line Ns = Ns Ar line-number 798Start screening at the specified line number while performing DH candidate 799screening. 800.It Ic checkpoint Ns = Ns Ar filename 801Write the last line processed to the specified file while performing DH 802candidate screening. 803This will be used to skip lines in the input file that have already been 804processed if the job is restarted. 805.It Ic memory Ns = Ns Ar mbytes 806Specify the amount of memory to use (in megabytes) when generating 807candidate moduli for DH-GEX. 808.It Ic start Ns = Ns Ar hex-value 809Specify start point (in hex) when generating candidate moduli for DH-GEX. 810.It Ic generator Ns = Ns Ar value 811Specify desired generator (in decimal) when testing candidate moduli for DH-GEX. 812.El 813.Sh CERTIFICATES 814.Nm 815supports signing of keys to produce certificates that may be used for 816user or host authentication. 817Certificates consist of a public key, some identity information, zero or 818more principal (user or host) names and a set of options that 819are signed by a Certification Authority (CA) key. 820Clients or servers may then trust only the CA key and verify its signature 821on a certificate rather than trusting many user/host keys. 822Note that OpenSSH certificates are a different, and much simpler, format to 823the X.509 certificates used in 824.Xr ssl 8 . 825.Pp 826.Nm 827supports two types of certificates: user and host. 828User certificates authenticate users to servers, whereas host certificates 829authenticate server hosts to users. 830To generate a user certificate: 831.Pp 832.Dl $ ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub 833.Pp 834The resultant certificate will be placed in 835.Pa /path/to/user_key-cert.pub . 836A host certificate requires the 837.Fl h 838option: 839.Pp 840.Dl $ ssh-keygen -s /path/to/ca_key -I key_id -h /path/to/host_key.pub 841.Pp 842The host certificate will be output to 843.Pa /path/to/host_key-cert.pub . 844.Pp 845It is possible to sign using a CA key stored in a PKCS#11 token by 846providing the token library using 847.Fl D 848and identifying the CA key by providing its public half as an argument 849to 850.Fl s : 851.Pp 852.Dl $ ssh-keygen -s ca_key.pub -D libpkcs11.so -I key_id user_key.pub 853.Pp 854Similarly, it is possible for the CA key to be hosted in a 855.Xr ssh-agent 1 . 856This is indicated by the 857.Fl U 858flag and, again, the CA key must be identified by its public half. 859.Pp 860.Dl $ ssh-keygen -Us ca_key.pub -I key_id user_key.pub 861.Pp 862In all cases, 863.Ar key_id 864is a "key identifier" that is logged by the server when the certificate 865is used for authentication. 866.Pp 867Certificates may be limited to be valid for a set of principal (user/host) 868names. 869By default, generated certificates are valid for all users or hosts. 870To generate a certificate for a specified set of principals: 871.Pp 872.Dl $ ssh-keygen -s ca_key -I key_id -n user1,user2 user_key.pub 873.Dl "$ ssh-keygen -s ca_key -I key_id -h -n host.domain host_key.pub" 874.Pp 875Additional limitations on the validity and use of user certificates may 876be specified through certificate options. 877A certificate option may disable features of the SSH session, may be 878valid only when presented from particular source addresses or may 879force the use of a specific command. 880.Pp 881The options that are valid for user certificates are: 882.Pp 883.Bl -tag -width Ds -compact 884.It Ic clear 885Clear all enabled permissions. 886This is useful for clearing the default set of permissions so permissions may 887be added individually. 888.Pp 889.It Ic critical : Ns Ar name Ns Op Ns = Ns Ar contents 890.It Ic extension : Ns Ar name Ns Op Ns = Ns Ar contents 891Includes an arbitrary certificate critical option or extension. 892The specified 893.Ar name 894should include a domain suffix, e.g.\& 895.Dq name@example.com . 896If 897.Ar contents 898is specified then it is included as the contents of the extension/option 899encoded as a string, otherwise the extension/option is created with no 900contents (usually indicating a flag). 901Extensions may be ignored by a client or server that does not recognise them, 902whereas unknown critical options will cause the certificate to be refused. 903.Pp 904.It Ic force-command Ns = Ns Ar command 905Forces the execution of 906.Ar command 907instead of any shell or command specified by the user when 908the certificate is used for authentication. 909.Pp 910.It Ic no-agent-forwarding 911Disable 912.Xr ssh-agent 1 913forwarding (permitted by default). 914.Pp 915.It Ic no-port-forwarding 916Disable port forwarding (permitted by default). 917.Pp 918.It Ic no-pty 919Disable PTY allocation (permitted by default). 920.Pp 921.It Ic no-user-rc 922Disable execution of 923.Pa ~/.ssh/rc 924by 925.Xr sshd 8 926(permitted by default). 927.Pp 928.It Ic no-x11-forwarding 929Disable X11 forwarding (permitted by default). 930.Pp 931.It Ic permit-agent-forwarding 932Allows 933.Xr ssh-agent 1 934forwarding. 935.Pp 936.It Ic permit-port-forwarding 937Allows port forwarding. 938.Pp 939.It Ic permit-pty 940Allows PTY allocation. 941.Pp 942.It Ic permit-user-rc 943Allows execution of 944.Pa ~/.ssh/rc 945by 946.Xr sshd 8 . 947.Pp 948.It Ic permit-X11-forwarding 949Allows X11 forwarding. 950.Pp 951.It Ic no-touch-required 952Do not require signatures made using this key require demonstration 953of user presence (e.g. by having the user touch the authenticator). 954This option only makes sense for the FIDO authenticator algorithms 955.Cm ecdsa-sk 956and 957.Cm ed25519-sk . 958.Pp 959.It Ic source-address Ns = Ns Ar address_list 960Restrict the source addresses from which the certificate is considered valid. 961The 962.Ar address_list 963is a comma-separated list of one or more address/netmask pairs in CIDR 964format. 965.El 966.Pp 967At present, no standard options are valid for host keys. 968.Pp 969Finally, certificates may be defined with a validity lifetime. 970The 971.Fl V 972option allows specification of certificate start and end times. 973A certificate that is presented at a time outside this range will not be 974considered valid. 975By default, certificates are valid from 976.Ux 977Epoch to the distant future. 978.Pp 979For certificates to be used for user or host authentication, the CA 980public key must be trusted by 981.Xr sshd 8 982or 983.Xr ssh 1 . 984Please refer to those manual pages for details. 985.Sh KEY REVOCATION LISTS 986.Nm 987is able to manage OpenSSH format Key Revocation Lists (KRLs). 988These binary files specify keys or certificates to be revoked using a 989compact format, taking as little as one bit per certificate if they are being 990revoked by serial number. 991.Pp 992KRLs may be generated using the 993.Fl k 994flag. 995This option reads one or more files from the command line and generates a new 996KRL. 997The files may either contain a KRL specification (see below) or public keys, 998listed one per line. 999Plain public keys are revoked by listing their hash or contents in the KRL and 1000certificates revoked by serial number or key ID (if the serial is zero or 1001not available). 1002.Pp 1003Revoking keys using a KRL specification offers explicit control over the 1004types of record used to revoke keys and may be used to directly revoke 1005certificates by serial number or key ID without having the complete original 1006certificate on hand. 1007A KRL specification consists of lines containing one of the following directives 1008followed by a colon and some directive-specific information. 1009.Bl -tag -width Ds 1010.It Cm serial : Ar serial_number Ns Op - Ns Ar serial_number 1011Revokes a certificate with the specified serial number. 1012Serial numbers are 64-bit values, not including zero and may be expressed 1013in decimal, hex or octal. 1014If two serial numbers are specified separated by a hyphen, then the range 1015of serial numbers including and between each is revoked. 1016The CA key must have been specified on the 1017.Nm 1018command line using the 1019.Fl s 1020option. 1021.It Cm id : Ar key_id 1022Revokes a certificate with the specified key ID string. 1023The CA key must have been specified on the 1024.Nm 1025command line using the 1026.Fl s 1027option. 1028.It Cm key : Ar public_key 1029Revokes the specified key. 1030If a certificate is listed, then it is revoked as a plain public key. 1031.It Cm sha1 : Ar public_key 1032Revokes the specified key by including its SHA1 hash in the KRL. 1033.It Cm sha256 : Ar public_key 1034Revokes the specified key by including its SHA256 hash in the KRL. 1035KRLs that revoke keys by SHA256 hash are not supported by OpenSSH versions 1036prior to 7.9. 1037.It Cm hash : Ar fingerprint 1038Revokes a key using a fingerprint hash, as obtained from a 1039.Xr sshd 8 1040authentication log message or the 1041.Nm 1042.Fl l 1043flag. 1044Only SHA256 fingerprints are supported here and resultant KRLs are 1045not supported by OpenSSH versions prior to 7.9. 1046.El 1047.Pp 1048KRLs may be updated using the 1049.Fl u 1050flag in addition to 1051.Fl k . 1052When this option is specified, keys listed via the command line are merged into 1053the KRL, adding to those already there. 1054.Pp 1055It is also possible, given a KRL, to test whether it revokes a particular key 1056(or keys). 1057The 1058.Fl Q 1059flag will query an existing KRL, testing each key specified on the command line. 1060If any key listed on the command line has been revoked (or an error encountered) 1061then 1062.Nm 1063will exit with a non-zero exit status. 1064A zero exit status will only be returned if no key was revoked. 1065.Sh ALLOWED SIGNERS 1066When verifying signatures, 1067.Nm 1068uses a simple list of identities and keys to determine whether a signature 1069comes from an authorized source. 1070This "allowed signers" file uses a format patterned after the 1071AUTHORIZED_KEYS FILE FORMAT described in 1072.Xr sshd 8 . 1073Each line of the file contains the following space-separated fields: 1074principals, options, keytype, base64-encoded key. 1075Empty lines and lines starting with a 1076.Ql # 1077are ignored as comments. 1078.Pp 1079The principals field is a pattern-list (See PATTERNS in 1080.Xr ssh_config 5 ) 1081consisting of one or more comma-separated USER@DOMAIN identity patterns 1082that are accepted for signing. 1083When verifying, the identity presented via the 1084.Fl I 1085option must match a principals pattern in order for the corresponding key to be 1086considered acceptable for verification. 1087.Pp 1088The options (if present) consist of comma-separated option specifications. 1089No spaces are permitted, except within double quotes. 1090The following option specifications are supported (note that option keywords 1091are case-insensitive): 1092.Bl -tag -width Ds 1093.It Cm cert-authority 1094Indicates that this key is accepted as a certificate authority (CA) and 1095that certificates signed by this CA may be accepted for verification. 1096.It Cm namespaces="namespace-list" 1097Specifies a pattern-list of namespaces that are accepted for this key. 1098If this option is present, the signature namespace embedded in the 1099signature object and presented on the verification command-line must 1100match the specified list before the key will be considered acceptable. 1101.El 1102.Pp 1103When verifying signatures made by certificates, the expected principal 1104name must match both the principals pattern in the allowed signers file and 1105the principals embedded in the certificate itself. 1106.Pp 1107An example allowed signers file: 1108.Bd -literal -offset 3n 1109# Comments allowed at start of line 1110user1@example.com,user2@example.com ssh-rsa AAAAX1... 1111# A certificate authority, trusted for all principals in a domain. 1112*@example.com cert-authority ssh-ed25519 AAAB4... 1113# A key that is accepted only for file signing. 1114user2@example.com namespaces="file" ssh-ed25519 AAA41... 1115.Ed 1116.Sh ENVIRONMENT 1117.Bl -tag -width Ds 1118.It Ev SSH_SK_PROVIDER 1119Specifies a path to a library that will be used when loading any 1120FIDO authenticator-hosted keys, overriding the default of using 1121the built-in USB HID support. 1122.El 1123.Sh FILES 1124.Bl -tag -width Ds -compact 1125.It Pa ~/.ssh/id_dsa 1126.It Pa ~/.ssh/id_ecdsa 1127.It Pa ~/.ssh/id_ecdsa_sk 1128.It Pa ~/.ssh/id_ed25519 1129.It Pa ~/.ssh/id_ed25519_sk 1130.It Pa ~/.ssh/id_rsa 1131Contains the DSA, ECDSA, authenticator-hosted ECDSA, Ed25519, 1132authenticator-hosted Ed25519 or RSA authentication identity of the user. 1133This file should not be readable by anyone but the user. 1134It is possible to 1135specify a passphrase when generating the key; that passphrase will be 1136used to encrypt the private part of this file using 128-bit AES. 1137This file is not automatically accessed by 1138.Nm 1139but it is offered as the default file for the private key. 1140.Xr ssh 1 1141will read this file when a login attempt is made. 1142.Pp 1143.It Pa ~/.ssh/id_dsa.pub 1144.It Pa ~/.ssh/id_ecdsa.pub 1145.It Pa ~/.ssh/id_ecdsa_sk.pub 1146.It Pa ~/.ssh/id_ed25519.pub 1147.It Pa ~/.ssh/id_ed25519_sk.pub 1148.It Pa ~/.ssh/id_rsa.pub 1149Contains the DSA, ECDSA, authenticator-hosted ECDSA, Ed25519, 1150authenticator-hosted Ed25519 or RSA public key for authentication. 1151The contents of this file should be added to 1152.Pa ~/.ssh/authorized_keys 1153on all machines 1154where the user wishes to log in using public key authentication. 1155There is no need to keep the contents of this file secret. 1156.Pp 1157.It Pa /etc/moduli 1158Contains Diffie-Hellman groups used for DH-GEX. 1159The file format is described in 1160.Xr moduli 5 . 1161.El 1162.Sh SEE ALSO 1163.Xr ssh 1 , 1164.Xr ssh-add 1 , 1165.Xr ssh-agent 1 , 1166.Xr moduli 5 , 1167.Xr sshd 8 1168.Rs 1169.%R RFC 4716 1170.%T "The Secure Shell (SSH) Public Key File Format" 1171.%D 2006 1172.Re 1173.Sh AUTHORS 1174OpenSSH is a derivative of the original and free 1175ssh 1.2.12 release by Tatu Ylonen. 1176Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, 1177Theo de Raadt and Dug Song 1178removed many bugs, re-added newer features and 1179created OpenSSH. 1180Markus Friedl contributed the support for SSH 1181protocol versions 1.5 and 2.0. 1182