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