1SSH-KEYGEN(1) General Commands Manual SSH-KEYGEN(1) 2 3NAME 4 ssh-keygen M-bM-^@M-^S authentication key generation, management and conversion 5 6SYNOPSIS 7 ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] 8 [-N new_passphrase] [-C comment] [-f output_keyfile] 9 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] 10 ssh-keygen -i [-m key_format] [-f input_keyfile] 11 ssh-keygen -e [-m key_format] [-f input_keyfile] 12 ssh-keygen -y [-f input_keyfile] 13 ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile] 14 ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile] 15 ssh-keygen -B [-f input_keyfile] 16 ssh-keygen -D pkcs11 17 ssh-keygen -F hostname [-f known_hosts_file] [-l] 18 ssh-keygen -H [-f known_hosts_file] 19 ssh-keygen -R hostname [-f known_hosts_file] 20 ssh-keygen -r hostname [-f input_keyfile] [-g] 21 ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point] 22 ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines] 23 [-j start_line] [-K checkpt] [-W generator] 24 ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals] 25 [-O option] [-V validity_interval] [-z serial_number] file ... 26 ssh-keygen -L [-f input_keyfile] 27 ssh-keygen -A 28 ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number] 29 file ... 30 ssh-keygen -Q -f krl_file file ... 31 32DESCRIPTION 33 ssh-keygen generates, manages and converts authentication keys for 34 ssh(1). ssh-keygen can create RSA keys for use by SSH protocol version 1 35 and DSA, ECDSA, Ed25519 or RSA keys for use by SSH protocol version 2. 36 The type of key to be generated is specified with the -t option. If 37 invoked without any arguments, ssh-keygen will generate an RSA key for 38 use in SSH protocol 2 connections. 39 40 ssh-keygen is also used to generate groups for use in Diffie-Hellman 41 group exchange (DH-GEX). See the MODULI GENERATION section for details. 42 43 Finally, ssh-keygen can be used to generate and update Key Revocation 44 Lists, and to test whether given keys have been revoked by one. See the 45 KEY REVOCATION LISTS section for details. 46 47 Normally each user wishing to use SSH with public key authentication runs 48 this once to create the authentication key in ~/.ssh/identity, 49 ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 or ~/.ssh/id_rsa. 50 Additionally, the system administrator may use this to generate host 51 keys, as seen in /etc/rc. 52 53 Normally this program generates the key and asks for a file in which to 54 store the private key. The public key is stored in a file with the same 55 name but M-bM-^@M-^\.pubM-bM-^@M-^] appended. The program also asks for a passphrase. The 56 passphrase may be empty to indicate no passphrase (host keys must have an 57 empty passphrase), or it may be a string of arbitrary length. A 58 passphrase is similar to a password, except it can be a phrase with a 59 series of words, punctuation, numbers, whitespace, or any string of 60 characters you want. Good passphrases are 10-30 characters long, are not 61 simple sentences or otherwise easily guessable (English prose has only 62 1-2 bits of entropy per character, and provides very bad passphrases), 63 and contain a mix of upper and lowercase letters, numbers, and non- 64 alphanumeric characters. The passphrase can be changed later by using 65 the -p option. 66 67 There is no way to recover a lost passphrase. If the passphrase is lost 68 or forgotten, a new key must be generated and the corresponding public 69 key copied to other machines. 70 71 For RSA1 keys, there is also a comment field in the key file that is only 72 for convenience to the user to help identify the key. The comment can 73 tell what the key is for, or whatever is useful. The comment is 74 initialized to M-bM-^@M-^\user@hostM-bM-^@M-^] when the key is created, but can be changed 75 using the -c option. 76 77 After a key is generated, instructions below detail where the keys should 78 be placed to be activated. 79 80 The options are as follows: 81 82 -A For each of the key types (rsa1, rsa, dsa, ecdsa and ed25519) for 83 which host keys do not exist, generate the host keys with the 84 default key file path, an empty passphrase, default bits for the 85 key type, and default comment. This is used by /etc/rc to 86 generate new host keys. 87 88 -a rounds 89 When saving a new-format private key (i.e. an ed25519 key or any 90 SSH protocol 2 key when the -o flag is set), this option 91 specifies the number of KDF (key derivation function) rounds 92 used. Higher numbers result in slower passphrase verification 93 and increased resistance to brute-force password cracking (should 94 the keys be stolen). 95 96 When screening DH-GEX candidates ( using the -T command). This 97 option specifies the number of primality tests to perform. 98 99 -B Show the bubblebabble digest of specified private or public key 100 file. 101 102 -b bits 103 Specifies the number of bits in the key to create. For RSA keys, 104 the minimum size is 1024 bits and the default is 2048 bits. 105 Generally, 2048 bits is considered sufficient. DSA keys must be 106 exactly 1024 bits as specified by FIPS 186-2. For ECDSA keys, 107 the -b flag determines the key length by selecting from one of 108 three elliptic curve sizes: 256, 384 or 521 bits. Attempting to 109 use bit lengths other than these three values for ECDSA keys will 110 fail. Ed25519 keys have a fixed length and the -b flag will be 111 ignored. 112 113 -C comment 114 Provides a new comment. 115 116 -c Requests changing the comment in the private and public key 117 files. This operation is only supported for RSA1 keys. The 118 program will prompt for the file containing the private keys, for 119 the passphrase if the key has one, and for the new comment. 120 121 -D pkcs11 122 Download the RSA public keys provided by the PKCS#11 shared 123 library pkcs11. When used in combination with -s, this option 124 indicates that a CA key resides in a PKCS#11 token (see the 125 CERTIFICATES section for details). 126 127 -E fingerprint_hash 128 Specifies the hash algorithm used when displaying key 129 fingerprints. Valid options are: M-bM-^@M-^\md5M-bM-^@M-^] and M-bM-^@M-^\sha256M-bM-^@M-^]. The 130 default is M-bM-^@M-^\sha256M-bM-^@M-^]. 131 132 -e This option will read a private or public OpenSSH key file and 133 print to stdout the key in one of the formats specified by the -m 134 option. The default export format is M-bM-^@M-^\RFC4716M-bM-^@M-^]. This option 135 allows exporting OpenSSH keys for use by other programs, 136 including several commercial SSH implementations. 137 138 -F hostname 139 Search for the specified hostname in a known_hosts file, listing 140 any occurrences found. This option is useful to find hashed host 141 names or addresses and may also be used in conjunction with the 142 -H option to print found keys in a hashed format. 143 144 -f filename 145 Specifies the filename of the key file. 146 147 -G output_file 148 Generate candidate primes for DH-GEX. These primes must be 149 screened for safety (using the -T option) before use. 150 151 -g Use generic DNS format when printing fingerprint resource records 152 using the -r command. 153 154 -H Hash a known_hosts file. This replaces all hostnames and 155 addresses with hashed representations within the specified file; 156 the original content is moved to a file with a .old suffix. 157 These hashes may be used normally by ssh and sshd, but they do 158 not reveal identifying information should the file's contents be 159 disclosed. This option will not modify existing hashed hostnames 160 and is therefore safe to use on files that mix hashed and non- 161 hashed names. 162 163 -h When signing a key, create a host certificate instead of a user 164 certificate. Please see the CERTIFICATES section for details. 165 166 -I certificate_identity 167 Specify the key identity when signing a public key. Please see 168 the CERTIFICATES section for details. 169 170 -i This option will read an unencrypted private (or public) key file 171 in the format specified by the -m option and print an OpenSSH 172 compatible private (or public) key to stdout. This option allows 173 importing keys from other software, including several commercial 174 SSH implementations. The default import format is M-bM-^@M-^\RFC4716M-bM-^@M-^]. 175 176 -J num_lines 177 Exit after screening the specified number of lines while 178 performing DH candidate screening using the -T option. 179 180 -j start_line 181 Start screening at the specified line number while performing DH 182 candidate screening using the -T option. 183 184 -K checkpt 185 Write the last line processed to the file checkpt while 186 performing DH candidate screening using the -T option. This will 187 be used to skip lines in the input file that have already been 188 processed if the job is restarted. 189 190 -k Generate a KRL file. In this mode, ssh-keygen will generate a 191 KRL file at the location specified via the -f flag that revokes 192 every key or certificate presented on the command line. 193 Keys/certificates to be revoked may be specified by public key 194 file or using the format described in the KEY REVOCATION LISTS 195 section. 196 197 -L Prints the contents of a certificate. 198 199 -l Show fingerprint of specified public key file. Private RSA1 keys 200 are also supported. For RSA and DSA keys ssh-keygen tries to 201 find the matching public key file and prints its fingerprint. If 202 combined with -v, an ASCII art representation of the key is 203 supplied with the fingerprint. 204 205 -M memory 206 Specify the amount of memory to use (in megabytes) when 207 generating candidate moduli for DH-GEX. 208 209 -m key_format 210 Specify a key format for the -i (import) or -e (export) 211 conversion options. The supported key formats are: M-bM-^@M-^\RFC4716M-bM-^@M-^] 212 (RFC 4716/SSH2 public or private key), M-bM-^@M-^\PKCS8M-bM-^@M-^] (PEM PKCS8 public 213 key) or M-bM-^@M-^\PEMM-bM-^@M-^] (PEM public key). The default conversion format is 214 M-bM-^@M-^\RFC4716M-bM-^@M-^]. 215 216 -N new_passphrase 217 Provides the new passphrase. 218 219 -n principals 220 Specify one or more principals (user or host names) to be 221 included in a certificate when signing a key. Multiple 222 principals may be specified, separated by commas. Please see the 223 CERTIFICATES section for details. 224 225 -O option 226 Specify a certificate option when signing a key. This option may 227 be specified multiple times. Please see the CERTIFICATES section 228 for details. The options that are valid for user certificates 229 are: 230 231 clear Clear all enabled permissions. This is useful for 232 clearing the default set of permissions so permissions 233 may be added individually. 234 235 force-command=command 236 Forces the execution of command instead of any shell or 237 command specified by the user when the certificate is 238 used for authentication. 239 240 no-agent-forwarding 241 Disable ssh-agent(1) forwarding (permitted by default). 242 243 no-port-forwarding 244 Disable port forwarding (permitted by default). 245 246 no-pty Disable PTY allocation (permitted by default). 247 248 no-user-rc 249 Disable execution of ~/.ssh/rc by sshd(8) (permitted by 250 default). 251 252 no-x11-forwarding 253 Disable X11 forwarding (permitted by default). 254 255 permit-agent-forwarding 256 Allows ssh-agent(1) forwarding. 257 258 permit-port-forwarding 259 Allows port forwarding. 260 261 permit-pty 262 Allows PTY allocation. 263 264 permit-user-rc 265 Allows execution of ~/.ssh/rc by sshd(8). 266 267 permit-x11-forwarding 268 Allows X11 forwarding. 269 270 source-address=address_list 271 Restrict the source addresses from which the certificate 272 is considered valid. The address_list is a comma- 273 separated list of one or more address/netmask pairs in 274 CIDR format. 275 276 At present, no options are valid for host keys. 277 278 -o Causes ssh-keygen to save SSH protocol 2 private keys using the 279 new OpenSSH format rather than the more compatible PEM format. 280 The new format has increased resistance to brute-force password 281 cracking but is not supported by versions of OpenSSH prior to 282 6.5. Ed25519 keys always use the new private key format. 283 284 -P passphrase 285 Provides the (old) passphrase. 286 287 -p Requests changing the passphrase of a private key file instead of 288 creating a new private key. The program will prompt for the file 289 containing the private key, for the old passphrase, and twice for 290 the new passphrase. 291 292 -Q Test whether keys have been revoked in a KRL. 293 294 -q Silence ssh-keygen. 295 296 -R hostname 297 Removes all keys belonging to hostname from a known_hosts file. 298 This option is useful to delete hashed hosts (see the -H option 299 above). 300 301 -r hostname 302 Print the SSHFP fingerprint resource record named hostname for 303 the specified public key file. 304 305 -S start 306 Specify start point (in hex) when generating candidate moduli for 307 DH-GEX. 308 309 -s ca_key 310 Certify (sign) a public key using the specified CA key. Please 311 see the CERTIFICATES section for details. 312 313 When generating a KRL, -s specifies a path to a CA public key 314 file used to revoke certificates directly by key ID or serial 315 number. See the KEY REVOCATION LISTS section for details. 316 317 -T output_file 318 Test DH group exchange candidate primes (generated using the -G 319 option) for safety. 320 321 -t dsa | ecdsa | ed25519 | rsa | rsa1 322 Specifies the type of key to create. The possible values are 323 M-bM-^@M-^\rsa1M-bM-^@M-^] for protocol version 1 and M-bM-^@M-^\dsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], M-bM-^@M-^\ed25519M-bM-^@M-^], or 324 M-bM-^@M-^\rsaM-bM-^@M-^] for protocol version 2. 325 326 -u Update a KRL. When specified with -k, keys listed via the 327 command line are added to the existing KRL rather than a new KRL 328 being created. 329 330 -V validity_interval 331 Specify a validity interval when signing a certificate. A 332 validity interval may consist of a single time, indicating that 333 the certificate is valid beginning now and expiring at that time, 334 or may consist of two times separated by a colon to indicate an 335 explicit time interval. The start time may be specified as a 336 date in YYYYMMDD format, a time in YYYYMMDDHHMMSS format or a 337 relative time (to the current time) consisting of a minus sign 338 followed by a relative time in the format described in the TIME 339 FORMATS section of sshd_config(5). The end time may be specified 340 as a YYYYMMDD date, a YYYYMMDDHHMMSS time or a relative time 341 starting with a plus character. 342 343 For example: M-bM-^@M-^\+52w1dM-bM-^@M-^] (valid from now to 52 weeks and one day 344 from now), M-bM-^@M-^\-4w:+4wM-bM-^@M-^] (valid from four weeks ago to four weeks 345 from now), M-bM-^@M-^\20100101123000:20110101123000M-bM-^@M-^] (valid from 12:30 PM, 346 January 1st, 2010 to 12:30 PM, January 1st, 2011), M-bM-^@M-^\-1d:20110101M-bM-^@M-^] 347 (valid from yesterday to midnight, January 1st, 2011). 348 349 -v Verbose mode. Causes ssh-keygen to print debugging messages 350 about its progress. This is helpful for debugging moduli 351 generation. Multiple -v options increase the verbosity. The 352 maximum is 3. 353 354 -W generator 355 Specify desired generator when testing candidate moduli for DH- 356 GEX. 357 358 -y This option will read a private OpenSSH format file and print an 359 OpenSSH public key to stdout. 360 361 -z serial_number 362 Specifies a serial number to be embedded in the certificate to 363 distinguish this certificate from others from the same CA. The 364 default serial number is zero. 365 366 When generating a KRL, the -z flag is used to specify a KRL 367 version number. 368 369MODULI GENERATION 370 ssh-keygen may be used to generate groups for the Diffie-Hellman Group 371 Exchange (DH-GEX) protocol. Generating these groups is a two-step 372 process: first, candidate primes are generated using a fast, but memory 373 intensive process. These candidate primes are then tested for 374 suitability (a CPU-intensive process). 375 376 Generation of primes is performed using the -G option. The desired 377 length of the primes may be specified by the -b option. For example: 378 379 # ssh-keygen -G moduli-2048.candidates -b 2048 380 381 By default, the search for primes begins at a random point in the desired 382 length range. This may be overridden using the -S option, which 383 specifies a different start point (in hex). 384 385 Once a set of candidates have been generated, they must be screened for 386 suitability. This may be performed using the -T option. In this mode 387 ssh-keygen will read candidates from standard input (or a file specified 388 using the -f option). For example: 389 390 # ssh-keygen -T moduli-2048 -f moduli-2048.candidates 391 392 By default, each candidate will be subjected to 100 primality tests. 393 This may be overridden using the -a option. The DH generator value will 394 be chosen automatically for the prime under consideration. If a specific 395 generator is desired, it may be requested using the -W option. Valid 396 generator values are 2, 3, and 5. 397 398 Screened DH groups may be installed in /etc/moduli. It is important that 399 this file contains moduli of a range of bit lengths and that both ends of 400 a connection share common moduli. 401 402CERTIFICATES 403 ssh-keygen supports signing of keys to produce certificates that may be 404 used for user or host authentication. Certificates consist of a public 405 key, some identity information, zero or more principal (user or host) 406 names and a set of options that are signed by a Certification Authority 407 (CA) key. Clients or servers may then trust only the CA key and verify 408 its signature on a certificate rather than trusting many user/host keys. 409 Note that OpenSSH certificates are a different, and much simpler, format 410 to the X.509 certificates used in ssl(8). 411 412 ssh-keygen supports two types of certificates: user and host. User 413 certificates authenticate users to servers, whereas host certificates 414 authenticate server hosts to users. To generate a user certificate: 415 416 $ ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub 417 418 The resultant certificate will be placed in /path/to/user_key-cert.pub. 419 A host certificate requires the -h option: 420 421 $ ssh-keygen -s /path/to/ca_key -I key_id -h /path/to/host_key.pub 422 423 The host certificate will be output to /path/to/host_key-cert.pub. 424 425 It is possible to sign using a CA key stored in a PKCS#11 token by 426 providing the token library using -D and identifying the CA key by 427 providing its public half as an argument to -s: 428 429 $ ssh-keygen -s ca_key.pub -D libpkcs11.so -I key_id user_key.pub 430 431 In all cases, key_id is a "key identifier" that is logged by the server 432 when the certificate is used for authentication. 433 434 Certificates may be limited to be valid for a set of principal 435 (user/host) names. By default, generated certificates are valid for all 436 users or hosts. To generate a certificate for a specified set of 437 principals: 438 439 $ ssh-keygen -s ca_key -I key_id -n user1,user2 user_key.pub 440 $ ssh-keygen -s ca_key -I key_id -h -n host.domain host_key.pub 441 442 Additional limitations on the validity and use of user certificates may 443 be specified through certificate options. A certificate option may 444 disable features of the SSH session, may be valid only when presented 445 from particular source addresses or may force the use of a specific 446 command. For a list of valid certificate options, see the documentation 447 for the -O option above. 448 449 Finally, certificates may be defined with a validity lifetime. The -V 450 option allows specification of certificate start and end times. A 451 certificate that is presented at a time outside this range will not be 452 considered valid. By default, certificates are valid from UNIX Epoch to 453 the distant future. 454 455 For certificates to be used for user or host authentication, the CA 456 public key must be trusted by sshd(8) or ssh(1). Please refer to those 457 manual pages for details. 458 459KEY REVOCATION LISTS 460 ssh-keygen is able to manage OpenSSH format Key Revocation Lists (KRLs). 461 These binary files specify keys or certificates to be revoked using a 462 compact format, taking as little as one bit per certificate if they are 463 being revoked by serial number. 464 465 KRLs may be generated using the -k flag. This option reads one or more 466 files from the command line and generates a new KRL. The files may 467 either contain a KRL specification (see below) or public keys, listed one 468 per line. Plain public keys are revoked by listing their hash or 469 contents in the KRL and certificates revoked by serial number or key ID 470 (if the serial is zero or not available). 471 472 Revoking keys using a KRL specification offers explicit control over the 473 types of record used to revoke keys and may be used to directly revoke 474 certificates by serial number or key ID without having the complete 475 original certificate on hand. A KRL specification consists of lines 476 containing one of the following directives followed by a colon and some 477 directive-specific information. 478 479 serial: serial_number[-serial_number] 480 Revokes a certificate with the specified serial number. Serial 481 numbers are 64-bit values, not including zero and may be 482 expressed in decimal, hex or octal. If two serial numbers are 483 specified separated by a hyphen, then the range of serial numbers 484 including and between each is revoked. The CA key must have been 485 specified on the ssh-keygen command line using the -s option. 486 487 id: key_id 488 Revokes a certificate with the specified key ID string. The CA 489 key must have been specified on the ssh-keygen command line using 490 the -s option. 491 492 key: public_key 493 Revokes the specified key. If a certificate is listed, then it 494 is revoked as a plain public key. 495 496 sha1: public_key 497 Revokes the specified key by its SHA1 hash. 498 499 KRLs may be updated using the -u flag in addition to -k. When this 500 option is specified, keys listed via the command line are merged into the 501 KRL, adding to those already there. 502 503 It is also possible, given a KRL, to test whether it revokes a particular 504 key (or keys). The -Q flag will query an existing KRL, testing each key 505 specified on the commandline. If any key listed on the command line has 506 been revoked (or an error encountered) then ssh-keygen will exit with a 507 non-zero exit status. A zero exit status will only be returned if no key 508 was revoked. 509 510FILES 511 ~/.ssh/identity 512 Contains the protocol version 1 RSA authentication identity of 513 the user. This file should not be readable by anyone but the 514 user. It is possible to specify a passphrase when generating the 515 key; that passphrase will be used to encrypt the private part of 516 this file using 3DES. This file is not automatically accessed by 517 ssh-keygen but it is offered as the default file for the private 518 key. ssh(1) will read this file when a login attempt is made. 519 520 ~/.ssh/identity.pub 521 Contains the protocol version 1 RSA public key for 522 authentication. The contents of this file should be added to 523 ~/.ssh/authorized_keys on all machines where the user wishes to 524 log in using RSA authentication. There is no need to keep the 525 contents of this file secret. 526 527 ~/.ssh/id_dsa 528 ~/.ssh/id_ecdsa 529 ~/.ssh/id_ed25519 530 ~/.ssh/id_rsa 531 Contains the protocol version 2 DSA, ECDSA, Ed25519 or RSA 532 authentication identity of the user. This file should not be 533 readable by anyone but the user. It is possible to specify a 534 passphrase when generating the key; that passphrase will be used 535 to encrypt the private part of this file using 128-bit AES. This 536 file is not automatically accessed by ssh-keygen but it is 537 offered as the default file for the private key. ssh(1) will 538 read this file when a login attempt is made. 539 540 ~/.ssh/id_dsa.pub 541 ~/.ssh/id_ecdsa.pub 542 ~/.ssh/id_ed25519.pub 543 ~/.ssh/id_rsa.pub 544 Contains the protocol version 2 DSA, ECDSA, Ed25519 or RSA public 545 key for authentication. The contents of this file should be 546 added to ~/.ssh/authorized_keys on all machines where the user 547 wishes to log in using public key authentication. There is no 548 need to keep the contents of this file secret. 549 550 /etc/moduli 551 Contains Diffie-Hellman groups used for DH-GEX. The file format 552 is described in moduli(5). 553 554SEE ALSO 555 ssh(1), ssh-add(1), ssh-agent(1), moduli(5), sshd(8) 556 557 The Secure Shell (SSH) Public Key File Format, RFC 4716, 2006. 558 559AUTHORS 560 OpenSSH is a derivative of the original and free ssh 1.2.12 release by 561 Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo 562 de Raadt and Dug Song removed many bugs, re-added newer features and 563 created OpenSSH. Markus Friedl contributed the support for SSH protocol 564 versions 1.5 and 2.0. 565 566OpenBSD 5.8 August 20, 2015 OpenBSD 5.8 567