1.\" $OpenBSD: ssh-keygen.1,v 1.226 2022/09/10 08:50:53 jsg 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: September 10 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 274Generate host keys of all default key types (rsa, ecdsa, and 275ed25519) if they do not already exist. 276The host keys are generated 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 or time in the YYYYMMDD[Z] or 515in YYYYMMDDHHMM[SS][Z] formats. 516Dates and times will be interpreted in the current system time zone unless 517suffixed with a Z character, which causes them to be interpreted in the 518UTC time zone. 519.El 520.Pp 521The 522.Fl O 523option may be specified multiple times. 524.It Fl P Ar passphrase 525Provides the (old) passphrase. 526.It Fl p 527Requests changing the passphrase of a private key file instead of 528creating a new private key. 529The program will prompt for the file 530containing the private key, for the old passphrase, and twice for the 531new passphrase. 532.It Fl Q 533Test whether keys have been revoked in a KRL. 534If the 535.Fl l 536option is also specified then the contents of the KRL will be printed. 537.It Fl q 538Silence 539.Nm ssh-keygen . 540.It Fl R Ar hostname | [hostname]:port 541Removes all keys belonging to the specified 542.Ar hostname 543(with optional port number) 544from a 545.Pa known_hosts 546file. 547This option is useful to delete hashed hosts (see the 548.Fl H 549option above). 550.It Fl r Ar hostname 551Print the SSHFP fingerprint resource record named 552.Ar hostname 553for the specified public key file. 554.It Fl s Ar ca_key 555Certify (sign) a public key using the specified CA key. 556See the 557.Sx CERTIFICATES 558section for details. 559.Pp 560When generating a KRL, 561.Fl s 562specifies a path to a CA public key file used to revoke certificates directly 563by key ID or serial number. 564See the 565.Sx KEY REVOCATION LISTS 566section for details. 567.It Fl t Cm dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa 568Specifies the type of key to create. 569The possible values are 570.Dq dsa , 571.Dq ecdsa , 572.Dq ecdsa-sk , 573.Dq ed25519 , 574.Dq ed25519-sk , 575or 576.Dq rsa . 577.Pp 578This flag may also be used to specify the desired signature type when 579signing certificates using an RSA CA key. 580The available RSA signature variants are 581.Dq ssh-rsa 582(SHA1 signatures, not recommended), 583.Dq rsa-sha2-256 , 584and 585.Dq rsa-sha2-512 586(the default). 587.It Fl U 588When used in combination with 589.Fl s 590or 591.Fl Y Cm sign , 592this option indicates that a CA key resides in a 593.Xr ssh-agent 1 . 594See the 595.Sx CERTIFICATES 596section for more information. 597.It Fl u 598Update a KRL. 599When specified with 600.Fl k , 601keys listed via the command line are added to the existing KRL rather than 602a new KRL being created. 603.It Fl V Ar validity_interval 604Specify a validity interval when signing a certificate. 605A validity interval may consist of a single time, indicating that the 606certificate is valid beginning now and expiring at that time, or may consist 607of two times separated by a colon to indicate an explicit time interval. 608.Pp 609The start time may be specified as: 610.Bl -bullet -compact 611.It 612The string 613.Dq always 614to indicate the certificate has no specified start time. 615.It 616A date or time in the system time zone formatted as YYYYMMDD or 617YYYYMMDDHHMM[SS]. 618.It 619A date or time in the UTC time zone as YYYYMMDDZ or YYYYMMDDHHMM[SS]Z. 620.It 621A relative time before the current system time consisting of a minus sign 622followed by an interval in the format described in the 623TIME FORMATS section of 624.Xr sshd_config 5 . 625.It 626A raw seconds since epoch (Jan 1 1970 00:00:00 UTC) as a hexadecimal 627number beginning with 628.Dq 0x . 629.El 630.Pp 631The end time may be specified similarly to the start time: 632.Bl -bullet -compact 633.It 634The string 635.Dq forever 636to indicate the certificate has no specified end time. 637.It 638A date or time in the system time zone formatted as YYYYMMDD or 639YYYYMMDDHHMM[SS]. 640.It 641A date or time in the UTC time zone as YYYYMMDDZ or YYYYMMDDHHMM[SS]Z. 642.It 643A relative time after the current system time consisting of a plus sign 644followed by an interval in the format described in the 645TIME FORMATS section of 646.Xr sshd_config 5 . 647.It 648A raw seconds since epoch (Jan 1 1970 00:00:00 UTC) as a hexadecimal 649number beginning with 650.Dq 0x . 651.El 652.Pp 653For example: 654.Bl -tag -width Ds 655.It +52w1d 656Valid from now to 52 weeks and one day from now. 657.It -4w:+4w 658Valid from four weeks ago to four weeks from now. 659.It 20100101123000:20110101123000 660Valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011. 661.It 20100101123000Z:20110101123000Z 662Similar, but interpreted in the UTC time zone rather than the system time zone. 663.It -1d:20110101 664Valid from yesterday to midnight, January 1st, 2011. 665.It 0x1:0x2000000000 666Valid from roughly early 1970 to May 2033. 667.It -1m:forever 668Valid from one minute ago and never expiring. 669.El 670.It Fl v 671Verbose mode. 672Causes 673.Nm 674to print debugging messages about its progress. 675This is helpful for debugging moduli generation. 676Multiple 677.Fl v 678options increase the verbosity. 679The maximum is 3. 680.It Fl w Ar provider 681Specifies a path to a library that will be used when creating 682FIDO authenticator-hosted keys, overriding the default of using 683the internal USB HID support. 684.It Fl Y Cm find-principals 685Find the principal(s) associated with the public key of a signature, 686provided using the 687.Fl s 688flag in an authorized signers file provided using the 689.Fl f 690flag. 691The format of the allowed signers file is documented in the 692.Sx ALLOWED SIGNERS 693section below. 694If one or more matching principals are found, they are returned on 695standard output. 696.It Fl Y Cm match-principals 697Find principal matching the principal name provided using the 698.Fl I 699flag in the authorized signers file specified using the 700.Fl f 701flag. 702If one or more matching principals are found, they are returned on 703standard output. 704.It Fl Y Cm check-novalidate 705Checks that a signature generated using 706.Nm 707.Fl Y Cm sign 708has a valid structure. 709This does not validate if a signature comes from an authorized signer. 710When testing a signature, 711.Nm 712accepts a message on standard input and a signature namespace using 713.Fl n . 714A file containing the corresponding signature must also be supplied using the 715.Fl s 716flag. 717Successful testing of the signature is signalled by 718.Nm 719returning a zero exit status. 720.It Fl Y Cm sign 721Cryptographically sign a file or some data using a SSH key. 722When signing, 723.Nm 724accepts zero or more files to sign on the command-line - if no files 725are specified then 726.Nm 727will sign data presented on standard input. 728Signatures are written to the path of the input file with 729.Dq .sig 730appended, or to standard output if the message to be signed was read from 731standard input. 732.Pp 733The key used for signing is specified using the 734.Fl f 735option and may refer to either a private key, or a public key with the private 736half available via 737.Xr ssh-agent 1 . 738An additional signature namespace, used to prevent signature confusion across 739different domains of use (e.g. file signing vs email signing) must be provided 740via the 741.Fl n 742flag. 743Namespaces are arbitrary strings, and may include: 744.Dq file 745for file signing, 746.Dq email 747for email signing. 748For custom uses, it is recommended to use names following a 749NAMESPACE@YOUR.DOMAIN pattern to generate unambiguous namespaces. 750.It Fl Y Cm verify 751Request to verify a signature generated using 752.Nm 753.Fl Y Cm sign 754as described above. 755When verifying a signature, 756.Nm 757accepts a message on standard input and a signature namespace using 758.Fl n . 759A file containing the corresponding signature must also be supplied using the 760.Fl s 761flag, along with the identity of the signer using 762.Fl I 763and a list of allowed signers via the 764.Fl f 765flag. 766The format of the allowed signers file is documented in the 767.Sx ALLOWED SIGNERS 768section below. 769A file containing revoked keys can be passed using the 770.Fl r 771flag. 772The revocation file may be a KRL or a one-per-line list of public keys. 773Successful verification by an authorized signer is signalled by 774.Nm 775returning a zero exit status. 776.It Fl y 777This option will read a private 778OpenSSH format file and print an OpenSSH public key to stdout. 779.It Fl Z Ar cipher 780Specifies the cipher to use for encryption when writing an OpenSSH-format 781private key file. 782The list of available ciphers may be obtained using 783.Qq ssh -Q cipher . 784The default is 785.Dq aes256-ctr . 786.It Fl z Ar serial_number 787Specifies a serial number to be embedded in the certificate to distinguish 788this certificate from others from the same CA. 789If the 790.Ar serial_number 791is prefixed with a 792.Sq + 793character, then the serial number will be incremented for each certificate 794signed on a single command-line. 795The default serial number is zero. 796.Pp 797When generating a KRL, the 798.Fl z 799flag is used to specify a KRL version number. 800.El 801.Sh MODULI GENERATION 802.Nm 803may be used to generate groups for the Diffie-Hellman Group Exchange 804(DH-GEX) protocol. 805Generating these groups is a two-step process: first, candidate 806primes are generated using a fast, but memory intensive process. 807These candidate primes are then tested for suitability (a CPU-intensive 808process). 809.Pp 810Generation of primes is performed using the 811.Fl M Cm generate 812option. 813The desired length of the primes may be specified by the 814.Fl O Cm bits 815option. 816For example: 817.Pp 818.Dl # ssh-keygen -M generate -O bits=2048 moduli-2048.candidates 819.Pp 820By default, the search for primes begins at a random point in the 821desired length range. 822This may be overridden using the 823.Fl O Cm start 824option, which specifies a different start point (in hex). 825.Pp 826Once a set of candidates have been generated, they must be screened for 827suitability. 828This may be performed using the 829.Fl M Cm screen 830option. 831In this mode 832.Nm 833will read candidates from standard input (or a file specified using the 834.Fl f 835option). 836For example: 837.Pp 838.Dl # ssh-keygen -M screen -f moduli-2048.candidates moduli-2048 839.Pp 840By default, each candidate will be subjected to 100 primality tests. 841This may be overridden using the 842.Fl O Cm prime-tests 843option. 844The DH generator value will be chosen automatically for the 845prime under consideration. 846If a specific generator is desired, it may be requested using the 847.Fl O Cm generator 848option. 849Valid generator values are 2, 3, and 5. 850.Pp 851Screened DH groups may be installed in 852.Pa /etc/moduli . 853It is important that this file contains moduli of a range of bit lengths. 854.Pp 855A number of options are available for moduli generation and screening via the 856.Fl O 857flag: 858.Bl -tag -width Ds 859.It Ic lines Ns = Ns Ar number 860Exit after screening the specified number of lines while performing DH 861candidate screening. 862.It Ic start-line Ns = Ns Ar line-number 863Start screening at the specified line number while performing DH candidate 864screening. 865.It Ic checkpoint Ns = Ns Ar filename 866Write the last line processed to the specified file while performing DH 867candidate screening. 868This will be used to skip lines in the input file that have already been 869processed if the job is restarted. 870.It Ic memory Ns = Ns Ar mbytes 871Specify the amount of memory to use (in megabytes) when generating 872candidate moduli for DH-GEX. 873.It Ic start Ns = Ns Ar hex-value 874Specify start point (in hex) when generating candidate moduli for DH-GEX. 875.It Ic generator Ns = Ns Ar value 876Specify desired generator (in decimal) when testing candidate moduli for DH-GEX. 877.El 878.Sh CERTIFICATES 879.Nm 880supports signing of keys to produce certificates that may be used for 881user or host authentication. 882Certificates consist of a public key, some identity information, zero or 883more principal (user or host) names and a set of options that 884are signed by a Certification Authority (CA) key. 885Clients or servers may then trust only the CA key and verify its signature 886on a certificate rather than trusting many user/host keys. 887Note that OpenSSH certificates are a different, and much simpler, format to 888the X.509 certificates used in 889.Xr ssl 8 . 890.Pp 891.Nm 892supports two types of certificates: user and host. 893User certificates authenticate users to servers, whereas host certificates 894authenticate server hosts to users. 895To generate a user certificate: 896.Pp 897.Dl $ ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub 898.Pp 899The resultant certificate will be placed in 900.Pa /path/to/user_key-cert.pub . 901A host certificate requires the 902.Fl h 903option: 904.Pp 905.Dl $ ssh-keygen -s /path/to/ca_key -I key_id -h /path/to/host_key.pub 906.Pp 907The host certificate will be output to 908.Pa /path/to/host_key-cert.pub . 909.Pp 910It is possible to sign using a CA key stored in a PKCS#11 token by 911providing the token library using 912.Fl D 913and identifying the CA key by providing its public half as an argument 914to 915.Fl s : 916.Pp 917.Dl $ ssh-keygen -s ca_key.pub -D libpkcs11.so -I key_id user_key.pub 918.Pp 919Similarly, it is possible for the CA key to be hosted in a 920.Xr ssh-agent 1 . 921This is indicated by the 922.Fl U 923flag and, again, the CA key must be identified by its public half. 924.Pp 925.Dl $ ssh-keygen -Us ca_key.pub -I key_id user_key.pub 926.Pp 927In all cases, 928.Ar key_id 929is a "key identifier" that is logged by the server when the certificate 930is used for authentication. 931.Pp 932Certificates may be limited to be valid for a set of principal (user/host) 933names. 934By default, generated certificates are valid for all users or hosts. 935To generate a certificate for a specified set of principals: 936.Pp 937.Dl $ ssh-keygen -s ca_key -I key_id -n user1,user2 user_key.pub 938.Dl "$ ssh-keygen -s ca_key -I key_id -h -n host.domain host_key.pub" 939.Pp 940Additional limitations on the validity and use of user certificates may 941be specified through certificate options. 942A certificate option may disable features of the SSH session, may be 943valid only when presented from particular source addresses or may 944force the use of a specific command. 945.Pp 946The options that are valid for user certificates are: 947.Pp 948.Bl -tag -width Ds -compact 949.It Ic clear 950Clear all enabled permissions. 951This is useful for clearing the default set of permissions so permissions may 952be added individually. 953.Pp 954.It Ic critical : Ns Ar name Ns Op Ns = Ns Ar contents 955.It Ic extension : Ns Ar name Ns Op Ns = Ns Ar contents 956Includes an arbitrary certificate critical option or extension. 957The specified 958.Ar name 959should include a domain suffix, e.g.\& 960.Dq name@example.com . 961If 962.Ar contents 963is specified then it is included as the contents of the extension/option 964encoded as a string, otherwise the extension/option is created with no 965contents (usually indicating a flag). 966Extensions may be ignored by a client or server that does not recognise them, 967whereas unknown critical options will cause the certificate to be refused. 968.Pp 969.It Ic force-command Ns = Ns Ar command 970Forces the execution of 971.Ar command 972instead of any shell or command specified by the user when 973the certificate is used for authentication. 974.Pp 975.It Ic no-agent-forwarding 976Disable 977.Xr ssh-agent 1 978forwarding (permitted by default). 979.Pp 980.It Ic no-port-forwarding 981Disable port forwarding (permitted by default). 982.Pp 983.It Ic no-pty 984Disable PTY allocation (permitted by default). 985.Pp 986.It Ic no-user-rc 987Disable execution of 988.Pa ~/.ssh/rc 989by 990.Xr sshd 8 991(permitted by default). 992.Pp 993.It Ic no-x11-forwarding 994Disable X11 forwarding (permitted by default). 995.Pp 996.It Ic permit-agent-forwarding 997Allows 998.Xr ssh-agent 1 999forwarding. 1000.Pp 1001.It Ic permit-port-forwarding 1002Allows port forwarding. 1003.Pp 1004.It Ic permit-pty 1005Allows PTY allocation. 1006.Pp 1007.It Ic permit-user-rc 1008Allows execution of 1009.Pa ~/.ssh/rc 1010by 1011.Xr sshd 8 . 1012.Pp 1013.It Ic permit-X11-forwarding 1014Allows X11 forwarding. 1015.Pp 1016.It Ic no-touch-required 1017Do not require signatures made using this key include demonstration 1018of user presence (e.g. by having the user touch the authenticator). 1019This option only makes sense for the FIDO authenticator algorithms 1020.Cm ecdsa-sk 1021and 1022.Cm ed25519-sk . 1023.Pp 1024.It Ic source-address Ns = Ns Ar address_list 1025Restrict the source addresses from which the certificate is considered valid. 1026The 1027.Ar address_list 1028is a comma-separated list of one or more address/netmask pairs in CIDR 1029format. 1030.Pp 1031.It Ic verify-required 1032Require signatures made using this key indicate that the user was first 1033verified. 1034This option only makes sense for the FIDO authenticator algorithms 1035.Cm ecdsa-sk 1036and 1037.Cm ed25519-sk . 1038Currently PIN authentication is the only supported verification method, 1039but other methods may be supported in the future. 1040.El 1041.Pp 1042At present, no standard options are valid for host keys. 1043.Pp 1044Finally, certificates may be defined with a validity lifetime. 1045The 1046.Fl V 1047option allows specification of certificate start and end times. 1048A certificate that is presented at a time outside this range will not be 1049considered valid. 1050By default, certificates are valid from the 1051.Ux 1052Epoch to the distant future. 1053.Pp 1054For certificates to be used for user or host authentication, the CA 1055public key must be trusted by 1056.Xr sshd 8 1057or 1058.Xr ssh 1 . 1059Refer to those manual pages for details. 1060.Sh FIDO AUTHENTICATOR 1061.Nm 1062is able to generate FIDO authenticator-backed keys, after which 1063they may be used much like any other key type supported by OpenSSH, so 1064long as the hardware authenticator is attached when the keys are used. 1065FIDO authenticators generally require the user to explicitly authorise 1066operations by touching or tapping them. 1067FIDO keys consist of two parts: a key handle part stored in the 1068private key file on disk, and a per-device private key that is unique 1069to each FIDO authenticator and that cannot be exported from the 1070authenticator hardware. 1071These are combined by the hardware at authentication time to derive 1072the real key that is used to sign authentication challenges. 1073Supported key types are 1074.Cm ecdsa-sk 1075and 1076.Cm ed25519-sk . 1077.Pp 1078The options that are valid for FIDO keys are: 1079.Bl -tag -width Ds 1080.It Cm application 1081Override the default FIDO application/origin string of 1082.Dq ssh: . 1083This may be useful when generating host or domain-specific resident keys. 1084The specified application string must begin with 1085.Dq ssh: . 1086.It Cm challenge Ns = Ns Ar path 1087Specifies a path to a challenge string that will be passed to the 1088FIDO authenticator during key generation. 1089The challenge string may be used as part of an out-of-band 1090protocol for key enrollment 1091(a random challenge is used by default). 1092.It Cm device 1093Explicitly specify a 1094.Xr fido 4 1095device to use, rather than letting the authenticator middleware select one. 1096.It Cm no-touch-required 1097Indicate that the generated private key should not require touch 1098events (user presence) when making signatures. 1099Note that 1100.Xr sshd 8 1101will refuse such signatures by default, unless overridden via 1102an authorized_keys option. 1103.It Cm resident 1104Indicate that the key handle should be stored on the FIDO 1105authenticator itself. 1106This makes it easier to use the authenticator on multiple computers. 1107Resident keys may be supported on FIDO2 authenticators and typically 1108require that a PIN be set on the authenticator prior to generation. 1109Resident keys may be loaded off the authenticator using 1110.Xr ssh-add 1 . 1111Storing both parts of a key on a FIDO authenticator increases the likelihood 1112of an attacker being able to use a stolen authenticator device. 1113.It Cm user 1114A username to be associated with a resident key, 1115overriding the empty default username. 1116Specifying a username may be useful when generating multiple resident keys 1117for the same application name. 1118.It Cm verify-required 1119Indicate that this private key should require user verification for 1120each signature. 1121Not all FIDO authenticators support this option. 1122Currently PIN authentication is the only supported verification method, 1123but other methods may be supported in the future. 1124.It Cm write-attestation Ns = Ns Ar path 1125May be used at key generation time to record the attestation data 1126returned from FIDO authenticators during key generation. 1127This information is potentially sensitive. 1128By default, this information is discarded. 1129.El 1130.Sh KEY REVOCATION LISTS 1131.Nm 1132is able to manage OpenSSH format Key Revocation Lists (KRLs). 1133These binary files specify keys or certificates to be revoked using a 1134compact format, taking as little as one bit per certificate if they are being 1135revoked by serial number. 1136.Pp 1137KRLs may be generated using the 1138.Fl k 1139flag. 1140This option reads one or more files from the command line and generates a new 1141KRL. 1142The files may either contain a KRL specification (see below) or public keys, 1143listed one per line. 1144Plain public keys are revoked by listing their hash or contents in the KRL and 1145certificates revoked by serial number or key ID (if the serial is zero or 1146not available). 1147.Pp 1148Revoking keys using a KRL specification offers explicit control over the 1149types of record used to revoke keys and may be used to directly revoke 1150certificates by serial number or key ID without having the complete original 1151certificate on hand. 1152A KRL specification consists of lines containing one of the following directives 1153followed by a colon and some directive-specific information. 1154.Bl -tag -width Ds 1155.It Cm serial : Ar serial_number Ns Op - Ns Ar serial_number 1156Revokes a certificate with the specified serial number. 1157Serial numbers are 64-bit values, not including zero and may be expressed 1158in decimal, hex or octal. 1159If two serial numbers are specified separated by a hyphen, then the range 1160of serial numbers including and between each is revoked. 1161The CA key must have been specified on the 1162.Nm 1163command line using the 1164.Fl s 1165option. 1166.It Cm id : Ar key_id 1167Revokes a certificate with the specified key ID string. 1168The CA key must have been specified on the 1169.Nm 1170command line using the 1171.Fl s 1172option. 1173.It Cm key : Ar public_key 1174Revokes the specified key. 1175If a certificate is listed, then it is revoked as a plain public key. 1176.It Cm sha1 : Ar public_key 1177Revokes the specified key by including its SHA1 hash in the KRL. 1178.It Cm sha256 : Ar public_key 1179Revokes the specified key by including its SHA256 hash in the KRL. 1180KRLs that revoke keys by SHA256 hash are not supported by OpenSSH versions 1181prior to 7.9. 1182.It Cm hash : Ar fingerprint 1183Revokes a key using a fingerprint hash, as obtained from a 1184.Xr sshd 8 1185authentication log message or the 1186.Nm 1187.Fl l 1188flag. 1189Only SHA256 fingerprints are supported here and resultant KRLs are 1190not supported by OpenSSH versions prior to 7.9. 1191.El 1192.Pp 1193KRLs may be updated using the 1194.Fl u 1195flag in addition to 1196.Fl k . 1197When this option is specified, keys listed via the command line are merged into 1198the KRL, adding to those already there. 1199.Pp 1200It is also possible, given a KRL, to test whether it revokes a particular key 1201(or keys). 1202The 1203.Fl Q 1204flag will query an existing KRL, testing each key specified on the command line. 1205If any key listed on the command line has been revoked (or an error encountered) 1206then 1207.Nm 1208will exit with a non-zero exit status. 1209A zero exit status will only be returned if no key was revoked. 1210.Sh ALLOWED SIGNERS 1211When verifying signatures, 1212.Nm 1213uses a simple list of identities and keys to determine whether a signature 1214comes from an authorized source. 1215This "allowed signers" file uses a format patterned after the 1216AUTHORIZED_KEYS FILE FORMAT described in 1217.Xr sshd 8 . 1218Each line of the file contains the following space-separated fields: 1219principals, options, keytype, base64-encoded key. 1220Empty lines and lines starting with a 1221.Ql # 1222are ignored as comments. 1223.Pp 1224The principals field is a pattern-list (see PATTERNS in 1225.Xr ssh_config 5 ) 1226consisting of one or more comma-separated USER@DOMAIN identity patterns 1227that are accepted for signing. 1228When verifying, the identity presented via the 1229.Fl I 1230option must match a principals pattern in order for the corresponding key to be 1231considered acceptable for verification. 1232.Pp 1233The options (if present) consist of comma-separated option specifications. 1234No spaces are permitted, except within double quotes. 1235The following option specifications are supported (note that option keywords 1236are case-insensitive): 1237.Bl -tag -width Ds 1238.It Cm cert-authority 1239Indicates that this key is accepted as a certificate authority (CA) and 1240that certificates signed by this CA may be accepted for verification. 1241.It Cm namespaces Ns = Ns "namespace-list" 1242Specifies a pattern-list of namespaces that are accepted for this key. 1243If this option is present, the signature namespace embedded in the 1244signature object and presented on the verification command-line must 1245match the specified list before the key will be considered acceptable. 1246.It Cm valid-after Ns = Ns "timestamp" 1247Indicates that the key is valid for use at or after the specified timestamp, 1248which may be a date or time in the YYYYMMDD[Z] or YYYYMMDDHHMM[SS][Z] formats. 1249Dates and times will be interpreted in the current system time zone unless 1250suffixed with a Z character, which causes them to be interpreted in the UTC 1251time zone. 1252.It Cm valid-before Ns = Ns "timestamp" 1253Indicates that the key is valid for use at or before the specified timestamp. 1254.El 1255.Pp 1256When verifying signatures made by certificates, the expected principal 1257name must match both the principals pattern in the allowed signers file and 1258the principals embedded in the certificate itself. 1259.Pp 1260An example allowed signers file: 1261.Bd -literal -offset 3n 1262# Comments allowed at start of line 1263user1@example.com,user2@example.com ssh-rsa AAAAX1... 1264# A certificate authority, trusted for all principals in a domain. 1265*@example.com cert-authority ssh-ed25519 AAAB4... 1266# A key that is accepted only for file signing. 1267user2@example.com namespaces="file" ssh-ed25519 AAA41... 1268.Ed 1269.Sh ENVIRONMENT 1270.Bl -tag -width Ds 1271.It Ev SSH_SK_PROVIDER 1272Specifies a path to a library that will be used when loading any 1273FIDO authenticator-hosted keys, overriding the default of using 1274the built-in USB HID support. 1275.El 1276.Sh FILES 1277.Bl -tag -width Ds -compact 1278.It Pa ~/.ssh/id_dsa 1279.It Pa ~/.ssh/id_ecdsa 1280.It Pa ~/.ssh/id_ecdsa_sk 1281.It Pa ~/.ssh/id_ed25519 1282.It Pa ~/.ssh/id_ed25519_sk 1283.It Pa ~/.ssh/id_rsa 1284Contains the DSA, ECDSA, authenticator-hosted ECDSA, Ed25519, 1285authenticator-hosted Ed25519 or RSA authentication identity of the user. 1286This file should not be readable by anyone but the user. 1287It is possible to 1288specify a passphrase when generating the key; that passphrase will be 1289used to encrypt the private part of this file using 128-bit AES. 1290This file is not automatically accessed by 1291.Nm 1292but it is offered as the default file for the private key. 1293.Xr ssh 1 1294will read this file when a login attempt is made. 1295.Pp 1296.It Pa ~/.ssh/id_dsa.pub 1297.It Pa ~/.ssh/id_ecdsa.pub 1298.It Pa ~/.ssh/id_ecdsa_sk.pub 1299.It Pa ~/.ssh/id_ed25519.pub 1300.It Pa ~/.ssh/id_ed25519_sk.pub 1301.It Pa ~/.ssh/id_rsa.pub 1302Contains the DSA, ECDSA, authenticator-hosted ECDSA, Ed25519, 1303authenticator-hosted Ed25519 or RSA public key for authentication. 1304The contents of this file should be added to 1305.Pa ~/.ssh/authorized_keys 1306on all machines 1307where the user wishes to log in using public key authentication. 1308There is no need to keep the contents of this file secret. 1309.Pp 1310.It Pa /etc/moduli 1311Contains Diffie-Hellman groups used for DH-GEX. 1312The file format is described in 1313.Xr moduli 5 . 1314.El 1315.Sh SEE ALSO 1316.Xr ssh 1 , 1317.Xr ssh-add 1 , 1318.Xr ssh-agent 1 , 1319.Xr moduli 5 , 1320.Xr sshd 8 1321.Rs 1322.%R RFC 4716 1323.%T "The Secure Shell (SSH) Public Key File Format" 1324.%D 2006 1325.Re 1326.Sh AUTHORS 1327OpenSSH is a derivative of the original and free 1328ssh 1.2.12 release by Tatu Ylonen. 1329Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, 1330Theo de Raadt and Dug Song 1331removed many bugs, re-added newer features and 1332created OpenSSH. 1333Markus Friedl contributed the support for SSH 1334protocol versions 1.5 and 2.0. 1335