{
    "content": [
        {
            "type": "text",
            "text": "# SSH-KEYGEN (man)\n\n## NAME\n\nssh-keygen — OpenSSH authentication key utility\n\n## SYNOPSIS\n\nssh-keygen  [-q]  [-a  rounds]  [-b  bits]  [-C  comment]  [-f  outputkeyfile]  [-m  format]\n[-N                  newpassphrase]                  [-O                  option]\n[-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-w provider] [-Z cipher]\nssh-keygen  -p  [-a  rounds] [-f keyfile] [-m format] [-N newpassphrase] [-P oldpassphrase]\n[-Z cipher]\nssh-keygen -i [-f inputkeyfile] [-m keyformat]\nssh-keygen -e [-f inputkeyfile] [-m keyformat]\nssh-keygen -y [-f inputkeyfile]\nssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]\nssh-keygen -l [-v] [-E fingerprinthash] [-f inputkeyfile]\nssh-keygen -B [-f inputkeyfile]\nssh-keygen -D pkcs11\nssh-keygen -F hostname [-lv] [-f knownhostsfile]\nssh-keygen -H [-f knownhostsfile]\nssh-keygen -K [-a rounds] [-w provider]\nssh-keygen -R hostname [-f knownhostsfile]\nssh-keygen -r hostname [-g] [-f inputkeyfile]\nssh-keygen -M generate [-O option] outputfile\nssh-keygen -M screen [-f inputfile] [-O option] outputfile\nssh-keygen -I certificateidentity -s  cakey  [-hU]  [-D  pkcs11provider]  [-n  principals]\n[-O option] [-V validityinterval] [-z serialnumber] file ...\nssh-keygen -L [-f inputkeyfile]\nssh-keygen -A [-a rounds] [-f prefixpath]\nssh-keygen -k -f krlfile [-u] [-s capublic] [-z versionnumber] file ...\nssh-keygen -Q [-l] -f krlfile file ...\nssh-keygen -Y find-principals [-O option] -s signaturefile -f allowedsignersfile\nssh-keygen -Y match-principals -I signeridentity -f allowedsignersfile\nssh-keygen -Y check-novalidate [-O option] -n namespace -s signaturefile\nssh-keygen -Y sign [-O option] -f keyfile -n namespace file ...\nssh-keygen  -Y  verify [-O option] -f allowedsignersfile -I signeridentity -n namespace -s\nsignaturefile [-r revocationfile]\n\n## DESCRIPTION\n\nssh-keygen generates, manages and converts authentication keys for  ssh(1).   ssh-keygen  can\ncreate keys for use by SSH protocol version 2.\n\n## TLDR\n\n> Generate SSH keys used for authentication, password-less logins, and other things.\n\n- Generate a key interactively:\n  `ssh-keygen`\n- Generate an ed25519 key with 32 key derivation function rounds and save the key to a specific file:\n  `ssh-keygen -f {{~/.ssh/filename}} -t ed25519 -a 32`\n- Generate an RSA 4096-bit key with email as a comment:\n  `ssh-keygen -t rsa -b 4096 -C \"{{comment|email}}\"`\n- Remove the keys of a host from the `known_hosts` file (useful when a known host has a new key):\n  `ssh-keygen -R {{remote_host}}`\n- Retrieve the fingerprint of a key in MD5 Hex:\n  `ssh-keygen -f {{~/.ssh/filename}} -l -E md5`\n- Change the password of a key:\n  `ssh-keygen -f {{~/.ssh/filename}} -p`\n- Change the type of the key format (for example from OPENSSH format to PEM), the file will be rewritten in-place:\n  `ssh-keygen -f {{~/.ssh/OpenSSH_private_key}} -p -m PEM`\n- Retrieve public key from private key:\n  `ssh-keygen -f {{~/.ssh/OpenSSH_private_key}} -y`\n\n*Source: tldr-pages*\n\n## Sections\n\n- **NAME**\n- **SYNOPSIS**\n- **DESCRIPTION** (47 subsections)\n- **MODULI GENERATION** (1 subsections)\n- **CERTIFICATES** (11 subsections)\n- **FIDO AUTHENTICATOR** (4 subsections)\n- **KEY REVOCATION LISTS** (1 subsections)\n- **ALLOWED SIGNERS** (1 subsections)\n- **ENVIRONMENT**\n- **FILES**\n- **SEE ALSO**\n- **AUTHORS**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "SSH-KEYGEN",
        "section": "",
        "mode": "man",
        "summary": "ssh-keygen — OpenSSH authentication key utility",
        "synopsis": "ssh-keygen  [-q]  [-a  rounds]  [-b  bits]  [-C  comment]  [-f  outputkeyfile]  [-m  format]\n[-N                  newpassphrase]                  [-O                  option]\n[-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-w provider] [-Z cipher]\nssh-keygen  -p  [-a  rounds] [-f keyfile] [-m format] [-N newpassphrase] [-P oldpassphrase]\n[-Z cipher]\nssh-keygen -i [-f inputkeyfile] [-m keyformat]\nssh-keygen -e [-f inputkeyfile] [-m keyformat]\nssh-keygen -y [-f inputkeyfile]\nssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]\nssh-keygen -l [-v] [-E fingerprinthash] [-f inputkeyfile]\nssh-keygen -B [-f inputkeyfile]\nssh-keygen -D pkcs11\nssh-keygen -F hostname [-lv] [-f knownhostsfile]\nssh-keygen -H [-f knownhostsfile]\nssh-keygen -K [-a rounds] [-w provider]\nssh-keygen -R hostname [-f knownhostsfile]\nssh-keygen -r hostname [-g] [-f inputkeyfile]\nssh-keygen -M generate [-O option] outputfile\nssh-keygen -M screen [-f inputfile] [-O option] outputfile\nssh-keygen -I certificateidentity -s  cakey  [-hU]  [-D  pkcs11provider]  [-n  principals]\n[-O option] [-V validityinterval] [-z serialnumber] file ...\nssh-keygen -L [-f inputkeyfile]\nssh-keygen -A [-a rounds] [-f prefixpath]\nssh-keygen -k -f krlfile [-u] [-s capublic] [-z versionnumber] file ...\nssh-keygen -Q [-l] -f krlfile file ...\nssh-keygen -Y find-principals [-O option] -s signaturefile -f allowedsignersfile\nssh-keygen -Y match-principals -I signeridentity -f allowedsignersfile\nssh-keygen -Y check-novalidate [-O option] -n namespace -s signaturefile\nssh-keygen -Y sign [-O option] -f keyfile -n namespace file ...\nssh-keygen  -Y  verify [-O option] -f allowedsignersfile -I signeridentity -n namespace -s\nsignaturefile [-r revocationfile]",
        "tldr_summary": "Generate SSH keys used for authentication, password-less logins, and other things.",
        "tldr_examples": [
            {
                "description": "Generate a key interactively",
                "command": "ssh-keygen"
            },
            {
                "description": "Generate an ed25519 key with 32 key derivation function rounds and save the key to a specific file",
                "command": "ssh-keygen -f {{~/.ssh/filename}} -t ed25519 -a 32"
            },
            {
                "description": "Generate an RSA 4096-bit key with email as a comment",
                "command": "ssh-keygen -t rsa -b 4096 -C \"{{comment|email}}\""
            },
            {
                "description": "Remove the keys of a host from the `known_hosts` file (useful when a known host has a new key)",
                "command": "ssh-keygen -R {{remote_host}}"
            },
            {
                "description": "Retrieve the fingerprint of a key in MD5 Hex",
                "command": "ssh-keygen -f {{~/.ssh/filename}} -l -E md5"
            },
            {
                "description": "Change the password of a key",
                "command": "ssh-keygen -f {{~/.ssh/filename}} -p"
            },
            {
                "description": "Change the type of the key format (for example from OPENSSH format to PEM), the file will be rewritten in-place",
                "command": "ssh-keygen -f {{~/.ssh/OpenSSH_private_key}} -p -m PEM"
            },
            {
                "description": "Retrieve public key from private key",
                "command": "ssh-keygen -f {{~/.ssh/OpenSSH_private_key}} -y"
            }
        ],
        "tldr_source": "official",
        "flags": [
            {
                "flag": "-A",
                "long": null,
                "arg": null,
                "description": "already exist. The host keys are generated with the default key file path, an empty passphrase, default bits for the key type, and default comment. If -f has also been specified, its argument is used as a prefix to the default path for the resulting host key files. This is used by system administration scripts to generate new host keys."
            },
            {
                "flag": "-a",
                "long": null,
                "arg": null,
                "description": "When saving a private key, this option specifies the number of KDF (key derivation function, currently bcryptpbkdf(3)) rounds used. Higher numbers result in slower passphrase verification and increased resistance to brute-force password cracking (should the keys be stolen). The default is 16 rounds."
            },
            {
                "flag": "-B",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "-b",
                "long": null,
                "arg": null,
                "description": "Specifies the number of bits in the key to create. For RSA keys, the minimum size is 1024 bits and the default is 3072 bits. Generally, 3072 bits is considered suffi‐ cient. DSA keys must be exactly 1024 bits as specified by FIPS 186-2. For ECDSA keys, the -b flag determines the key length by selecting from one of three elliptic curve sizes: 256, 384 or 521 bits. Attempting to use bit lengths other than these three values for ECDSA keys will fail. ECDSA-SK, Ed25519 and Ed25519-SK keys have a fixed length and the -b flag will be ignored."
            },
            {
                "flag": "-C",
                "long": null,
                "arg": null,
                "description": "Provides a new comment."
            },
            {
                "flag": "-c",
                "long": null,
                "arg": null,
                "description": "prompt for the file containing the private keys, for the passphrase if the key has one, and for the new comment."
            },
            {
                "flag": "-D",
                "long": null,
                "arg": null,
                "description": "Download the public keys provided by the PKCS#11 shared library pkcs11. When used in combination with -s, this option indicates that a CA key resides in a PKCS#11 token (see the “CERTIFICATES” section for details)."
            },
            {
                "flag": "-E",
                "long": null,
                "arg": null,
                "description": "Specifies the hash algorithm used when displaying key fingerprints. Valid options are: “md5” and “sha256”. The default is “sha256”."
            },
            {
                "flag": "-e",
                "long": null,
                "arg": null,
                "description": "lic key in one of the formats specified by the -m option. The default export format is “RFC4716”. This option allows exporting OpenSSH keys for use by other programs, including several commercial SSH implementations."
            },
            {
                "flag": "-F",
                "long": null,
                "arg": null,
                "description": "Search for the specified hostname (with optional port number) in a knownhosts file, listing any occurrences found. This option is useful to find hashed host names or addresses and may also be used in conjunction with the -H option to print found keys in a hashed format."
            },
            {
                "flag": "-f",
                "long": null,
                "arg": null,
                "description": "Specifies the filename of the key file."
            },
            {
                "flag": "-r",
                "long": null,
                "arg": null,
                "description": "mand."
            },
            {
                "flag": "-H",
                "long": null,
                "arg": null,
                "description": "resentations within the specified file; the original content is moved to a file with a .old suffix. These hashes may be used normally by ssh and sshd, but they do not reveal identifying information should the file's contents be disclosed. This option will not modify existing hashed hostnames and is therefore safe to use on files that mix hashed and non-hashed names."
            },
            {
                "flag": "-h",
                "long": null,
                "arg": null,
                "description": "“CERTIFICATES” section for details."
            },
            {
                "flag": "-I",
                "long": null,
                "arg": null,
                "description": "Specify the key identity when signing a public key. See the “CERTIFICATES” section for details."
            },
            {
                "flag": "-i",
                "long": null,
                "arg": null,
                "description": "ified by the -m option and print an OpenSSH compatible private (or public) key to stdout. This option allows importing keys from other software, including several commercial SSH implementations. The default import format is “RFC4716”."
            },
            {
                "flag": "-K",
                "long": null,
                "arg": null,
                "description": "be written to the current directory for each downloaded key. If multiple FIDO au‐ thenticators are attached, keys will be downloaded from the first touched authentica‐ tor. See the “FIDO AUTHENTICATOR” section for more information."
            },
            {
                "flag": "-k",
                "long": null,
                "arg": null,
                "description": "tion specified via the -f flag that revokes every key or certificate presented on the command line. Keys/certificates to be revoked may be specified by public key file or using the format described in the “KEY REVOCATION LISTS” section."
            },
            {
                "flag": "-L",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "-l",
                "long": null,
                "arg": null,
                "description": "to find the matching public key file and prints its fingerprint. If combined with -v, a visual ASCII art representation of the key is supplied with the fingerprint."
            },
            {
                "flag": "-M",
                "long": null,
                "arg": null,
                "description": "Generate candidate Diffie-Hellman Group Exchange (DH-GEX) parameters for eventual use by the ‘diffie-hellman-group-exchange-*’ key exchange methods. The numbers generated by this operation must be further screened before use. See the “MODULI GENERATION” section for more information."
            },
            {
                "flag": "-M",
                "long": null,
                "arg": null,
                "description": "Screen candidate parameters for Diffie-Hellman Group Exchange. This will accept a list of candidate numbers and test that they are safe (Sophie Germain) primes with acceptable group generators. The results of this operation may be added to the /etc/ssh/moduli file. See the “MODULI GENERATION” section for more information."
            },
            {
                "flag": "-m",
                "long": null,
                "arg": null,
                "description": "Specify a key format for key generation, the -i (import), -e (export) conversion op‐ tions, and the -p change passphrase operation. The latter may be used to convert be‐ tween OpenSSH private key and PEM private key formats. The supported key formats are: “RFC4716” (RFC 4716/SSH2 public or private key), “PKCS8” (PKCS8 public or pri‐ vate key) or “PEM” (PEM public key). By default OpenSSH will write newly-generated private keys in its own format, but when converting public keys for export the de‐ fault format is “RFC4716”. Setting a format of “PEM” when generating or updating a supported private key type will cause the key to be stored in the legacy PEM private key format."
            },
            {
                "flag": "-N",
                "long": null,
                "arg": null,
                "description": "Provides the new passphrase."
            },
            {
                "flag": "-n",
                "long": null,
                "arg": null,
                "description": "Specify one or more principals (user or host names) to be included in a certificate when signing a key. Multiple principals may be specified, separated by commas. See the “CERTIFICATES” section for details."
            },
            {
                "flag": "-O",
                "long": null,
                "arg": null,
                "description": "Specify a key/value option. These are specific to the operation that ssh-keygen has been requested to perform. When signing certificates, one of the options listed in the “CERTIFICATES” section may be specified here. When performing moduli generation or screening, one of the options listed in the “MODULI GENERATION” section may be specified. When generating FIDO authenticator-backed keys, the options listed in the “FIDO AUTHENTICATOR” section may be specified. When performing signature-related options using the -Y flag, the following options are accepted: hashalg=algorithm Selects the hash algorithm to use for hashing the message to be signed. Valid algorithms are “sha256” and “sha512.” The default is “sha512.” print-pubkey Print the full public key to standard output after signature verification. verify-time=timestamp Specifies a time to use when validating signatures instead of the current time. The time may be specified as a date or time in the YYYYMMDD[Z] or in YYYYMMDDHHMM[SS][Z] formats. Dates and times will be interpreted in the cur‐ rent system time zone unless suffixed with a Z character, which causes them to be interpreted in the UTC time zone. When generating SSHFP DNS records from public keys using the -r flag, the following options are accepted: hashalg=algorithm Selects a hash algorithm to use when printing SSHFP records using the -D flag. Valid algorithms are “sha1” and “sha256”. The default is to print both. The -O option may be specified multiple times."
            },
            {
                "flag": "-P",
                "long": null,
                "arg": null,
                "description": "Provides the (old) passphrase."
            },
            {
                "flag": "-p",
                "long": null,
                "arg": null,
                "description": "vate key. The program will prompt for the file containing the private key, for the old passphrase, and twice for the new passphrase."
            },
            {
                "flag": "-l",
                "long": null,
                "arg": null,
                "description": "then the contents of the KRL will be printed."
            },
            {
                "flag": "-q",
                "long": null,
                "arg": null,
                "description": ""
            },
            {
                "flag": "-R",
                "long": null,
                "arg": null,
                "description": "Removes all keys belonging to the specified hostname (with optional port number) from a knownhosts file. This option is useful to delete hashed hosts (see the -H option above)."
            },
            {
                "flag": "-r",
                "long": null,
                "arg": null,
                "description": "Print the SSHFP fingerprint resource record named hostname for the specified public key file."
            },
            {
                "flag": "-s",
                "long": null,
                "arg": null,
                "description": "Certify (sign) a public key using the specified CA key. See the “CERTIFICATES” sec‐ tion for details. When generating a KRL, -s specifies a path to a CA public key file used to revoke certificates directly by key ID or serial number. See the “KEY REVOCATION LISTS” section for details."
            },
            {
                "flag": "-t",
                "long": null,
                "arg": null,
                "description": "Specifies the type of key to create. The possible values are “dsa”, “ecdsa”, “ecdsa-sk”, “ed25519”, “ed25519-sk”, or “rsa”. This flag may also be used to specify the desired signature type when signing cer‐ tificates using an RSA CA key. The available RSA signature variants are “ssh-rsa” (SHA1 signatures, not recommended), “rsa-sha2-256”, and “rsa-sha2-512” (the default)."
            },
            {
                "flag": "-Y",
                "long": null,
                "arg": null,
                "description": "sides in a ssh-agent(1). See the “CERTIFICATES” section for more information."
            },
            {
                "flag": "-k",
                "long": null,
                "arg": null,
                "description": "the existing KRL rather than a new KRL being created."
            },
            {
                "flag": "-V",
                "long": null,
                "arg": null,
                "description": "Specify a validity interval when signing a certificate. A validity interval may con‐ sist of a single time, indicating that the certificate is valid beginning now and ex‐ piring at that time, or may consist of two times separated by a colon to indicate an explicit time interval. The start time may be specified as: • The string “always” to indicate the certificate has no specified start time. • A date or time in the system time zone formatted as YYYYMMDD or YYYYMMDDHHMM[SS]. • A date or time in the UTC time zone as YYYYMMDDZ or YYYYMMDDHHMM[SS]Z. • A relative time before the current system time consisting of a minus sign fol‐ lowed by an interval in the format described in the TIME FORMATS section of sshdconfig(5). • A raw seconds since epoch (Jan 1 1970 00:00:00 UTC) as a hexadecimal number be‐ ginning with “0x”. The end time may be specified similarly to the start time: • The string “forever” to indicate the certificate has no specified end time. • A date or time in the system time zone formatted as YYYYMMDD or YYYYMMDDHHMM[SS]. • A date or time in the UTC time zone as YYYYMMDDZ or YYYYMMDDHHMM[SS]Z. • A relative time after the current system time consisting of a plus sign followed by an interval in the format described in the TIME FORMATS section of sshdconfig(5). • A raw seconds since epoch (Jan 1 1970 00:00:00 UTC) as a hexadecimal number be‐ ginning with “0x”. For example: +52w1d Valid from now to 52 weeks and one day from now. -4w:+4w Valid from four weeks ago to four weeks from now. 20100101123000:20110101123000 Valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011. 20100101123000Z:20110101123000Z Similar, but interpreted in the UTC time zone rather than the system time zone. -1d:20110101 Valid from yesterday to midnight, January 1st, 2011. 0x1:0x2000000000 Valid from roughly early 1970 to May 2033. -1m:forever Valid from one minute ago and never expiring."
            },
            {
                "flag": "-v",
                "long": null,
                "arg": null,
                "description": "This is helpful for debugging moduli generation. Multiple -v options increase the verbosity. The maximum is 3."
            },
            {
                "flag": "-w",
                "long": null,
                "arg": null,
                "description": "Specifies a path to a library that will be used when creating FIDO authenticator- hosted keys, overriding the default of using the internal USB HID support."
            },
            {
                "flag": "-Y",
                "long": null,
                "arg": null,
                "description": "Find the principal(s) associated with the public key of a signature, provided using the -s flag in an authorized signers file provided using the -f flag. The format of the allowed signers file is documented in the “ALLOWED SIGNERS” section below. If one or more matching principals are found, they are returned on standard output."
            },
            {
                "flag": "-Y",
                "long": null,
                "arg": null,
                "description": "Find principal matching the principal name provided using the -I flag in the autho‐ rized signers file specified using the -f flag. If one or more matching principals are found, they are returned on standard output."
            },
            {
                "flag": "-Y",
                "long": null,
                "arg": null,
                "description": "Checks that a signature generated using ssh-keygen -Y sign has a valid structure. This does not validate if a signature comes from an authorized signer. When testing a signature, ssh-keygen accepts a message on standard input and a signature namespace using -n. A file containing the corresponding signature must also be supplied using the -s flag. Successful testing of the signature is signalled by ssh-keygen return‐ ing a zero exit status."
            },
            {
                "flag": "-Y",
                "long": null,
                "arg": null,
                "description": "Cryptographically sign a file or some data using an SSH key. When signing, ssh-keygen accepts zero or more files to sign on the command-line - if no files are specified then ssh-keygen will sign data presented on standard input. Signatures are written to the path of the input file with “.sig” appended, or to standard output if the message to be signed was read from standard input. The key used for signing is specified using the -f option and may refer to either a private key, or a public key with the private half available via ssh-agent(1). An additional signature namespace, used to prevent signature confusion across different domains of use (e.g. file signing vs email signing) must be provided via the -n flag. Namespaces are arbitrary strings, and may include: “file” for file signing, “email” for email signing. For custom uses, it is recommended to use names following a NAME‐ SPACE@YOUR.DOMAIN pattern to generate unambiguous namespaces."
            },
            {
                "flag": "-Y",
                "long": null,
                "arg": null,
                "description": "Request to verify a signature generated using ssh-keygen -Y sign as described above. When verifying a signature, ssh-keygen accepts a message on standard input and a sig‐ nature namespace using -n. A file containing the corresponding signature must also be supplied using the -s flag, along with the identity of the signer using -I and a list of allowed signers via the -f flag. The format of the allowed signers file is documented in the “ALLOWED SIGNERS” section below. A file containing revoked keys can be passed using the -r flag. The revocation file may be a KRL or a one-per-line list of public keys. Successful verification by an authorized signer is signalled by ssh-keygen returning a zero exit status."
            },
            {
                "flag": "-y",
                "long": null,
                "arg": null,
                "description": "to stdout."
            },
            {
                "flag": "-Z",
                "long": null,
                "arg": null,
                "description": "Specifies the cipher to use for encryption when writing an OpenSSH-format private key file. The list of available ciphers may be obtained using \"ssh -Q cipher\". The de‐ fault is “aes256-ctr”."
            },
            {
                "flag": "-z",
                "long": null,
                "arg": null,
                "description": "Specifies a serial number to be embedded in the certificate to distinguish this cer‐ tificate from others from the same CA. If the serialnumber is prefixed with a ‘+’ character, then the serial number will be incremented for each certificate signed on a single command-line. The default serial number is zero. When generating a KRL, the -z flag is used to specify a KRL version number."
            }
        ],
        "examples": [],
        "see_also": [
            {
                "name": "ssh",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/ssh/1/json"
            },
            {
                "name": "ssh-add",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/ssh-add/1/json"
            },
            {
                "name": "ssh-agent",
                "section": "1",
                "url": "https://www.chedong.com/phpMan.php/man/ssh-agent/1/json"
            },
            {
                "name": "moduli",
                "section": "5",
                "url": "https://www.chedong.com/phpMan.php/man/moduli/5/json"
            },
            {
                "name": "sshd",
                "section": "8",
                "url": "https://www.chedong.com/phpMan.php/man/sshd/8/json"
            }
        ],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 32,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 47,
                "subsections": [
                    {
                        "name": "-A",
                        "lines": 6,
                        "flag": "-A"
                    },
                    {
                        "name": "-a _",
                        "lines": 5,
                        "flag": "-a"
                    },
                    {
                        "name": "-B",
                        "lines": 1,
                        "flag": "-B"
                    },
                    {
                        "name": "-b _",
                        "lines": 8,
                        "flag": "-b"
                    },
                    {
                        "name": "-C _",
                        "lines": 2,
                        "flag": "-C"
                    },
                    {
                        "name": "-c",
                        "lines": 3,
                        "flag": "-c"
                    },
                    {
                        "name": "-D _",
                        "lines": 4,
                        "flag": "-D"
                    },
                    {
                        "name": "-E _",
                        "lines": 3,
                        "flag": "-E"
                    },
                    {
                        "name": "-e",
                        "lines": 4,
                        "flag": "-e"
                    },
                    {
                        "name": "-F _",
                        "lines": 5,
                        "flag": "-F"
                    },
                    {
                        "name": "-f _",
                        "lines": 2,
                        "flag": "-f"
                    },
                    {
                        "name": "-g       -r",
                        "lines": 2,
                        "flag": "-r"
                    },
                    {
                        "name": "-H",
                        "lines": 6,
                        "flag": "-H"
                    },
                    {
                        "name": "-h",
                        "lines": 2,
                        "flag": "-h"
                    },
                    {
                        "name": "-I _",
                        "lines": 3,
                        "flag": "-I"
                    },
                    {
                        "name": "-i",
                        "lines": 4,
                        "flag": "-i"
                    },
                    {
                        "name": "-K",
                        "lines": 4,
                        "flag": "-K"
                    },
                    {
                        "name": "-k",
                        "lines": 4,
                        "flag": "-k"
                    },
                    {
                        "name": "-L",
                        "lines": 1,
                        "flag": "-L"
                    },
                    {
                        "name": "-l",
                        "lines": 3,
                        "flag": "-l"
                    },
                    {
                        "name": "-M generate",
                        "lines": 5,
                        "flag": "-M"
                    },
                    {
                        "name": "-M screen",
                        "lines": 5,
                        "flag": "-M"
                    },
                    {
                        "name": "-m _",
                        "lines": 10,
                        "flag": "-m"
                    },
                    {
                        "name": "-N _",
                        "lines": 2,
                        "flag": "-N"
                    },
                    {
                        "name": "-n _",
                        "lines": 4,
                        "flag": "-n"
                    },
                    {
                        "name": "-O _",
                        "lines": 39,
                        "flag": "-O"
                    },
                    {
                        "name": "-P _",
                        "lines": 2,
                        "flag": "-P"
                    },
                    {
                        "name": "-p",
                        "lines": 3,
                        "flag": "-p"
                    },
                    {
                        "name": "-Q       -l",
                        "lines": 2,
                        "flag": "-l"
                    },
                    {
                        "name": "-q",
                        "lines": 1,
                        "flag": "-q"
                    },
                    {
                        "name": "-R _",
                        "lines": 4,
                        "flag": "-R"
                    },
                    {
                        "name": "-r _",
                        "lines": 3,
                        "flag": "-r"
                    },
                    {
                        "name": "-s _",
                        "lines": 7,
                        "flag": "-s"
                    },
                    {
                        "name": "-t dsa",
                        "lines": 7,
                        "flag": "-t"
                    },
                    {
                        "name": "-U       -s  -Y sign",
                        "lines": 2,
                        "flag": "-Y"
                    },
                    {
                        "name": "-u       -k",
                        "lines": 2,
                        "flag": "-k"
                    },
                    {
                        "name": "-V _",
                        "lines": 48,
                        "flag": "-V"
                    },
                    {
                        "name": "-v",
                        "lines": 3,
                        "flag": "-v"
                    },
                    {
                        "name": "-w _",
                        "lines": 3,
                        "flag": "-w"
                    },
                    {
                        "name": "-Y find-principals",
                        "lines": 5,
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y match-principals",
                        "lines": 4,
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y check-novalidate",
                        "lines": 7,
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y sign",
                        "lines": 14,
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y verify",
                        "lines": 10,
                        "flag": "-Y"
                    },
                    {
                        "name": "-y",
                        "lines": 2,
                        "flag": "-y"
                    },
                    {
                        "name": "-Z _",
                        "lines": 4,
                        "flag": "-Z"
                    },
                    {
                        "name": "-z _",
                        "lines": 7,
                        "flag": "-z"
                    }
                ]
            },
            {
                "name": "MODULI GENERATION",
                "lines": 23,
                "subsections": [
                    {
                        "name": "-O generator",
                        "lines": 27,
                        "flag": "-O"
                    }
                ]
            },
            {
                "name": "CERTIFICATES",
                "lines": 63,
                "subsections": [
                    {
                        "name": "no-agent-forwarding",
                        "lines": 2
                    },
                    {
                        "name": "no-port-forwarding",
                        "lines": 4
                    },
                    {
                        "name": "no-user-rc",
                        "lines": 2
                    },
                    {
                        "name": "no-x11-forwarding",
                        "lines": 2
                    },
                    {
                        "name": "permit-agent-forwarding",
                        "lines": 2
                    },
                    {
                        "name": "permit-port-forwarding",
                        "lines": 2
                    },
                    {
                        "name": "permit-pty",
                        "lines": 2
                    },
                    {
                        "name": "permit-user-rc",
                        "lines": 2
                    },
                    {
                        "name": "permit-X11-forwarding",
                        "lines": 2
                    },
                    {
                        "name": "no-touch-required",
                        "lines": 9
                    },
                    {
                        "name": "verify-required",
                        "lines": 15
                    }
                ]
            },
            {
                "name": "FIDO AUTHENTICATOR",
                "lines": 11,
                "subsections": [
                    {
                        "name": "application",
                        "lines": 12
                    },
                    {
                        "name": "no-touch-required",
                        "lines": 4
                    },
                    {
                        "name": "resident",
                        "lines": 11
                    },
                    {
                        "name": "verify-required",
                        "lines": 9
                    }
                ]
            },
            {
                "name": "KEY REVOCATION LISTS",
                "lines": 47,
                "subsections": [
                    {
                        "name": "-Q",
                        "lines": 4,
                        "flag": "-Q"
                    }
                ]
            },
            {
                "name": "ALLOWED SIGNERS",
                "lines": 15,
                "subsections": [
                    {
                        "name": "cert-authority",
                        "lines": 31
                    }
                ]
            },
            {
                "name": "ENVIRONMENT",
                "lines": 4,
                "subsections": []
            },
            {
                "name": "FILES",
                "lines": 30,
                "subsections": []
            },
            {
                "name": "SEE ALSO",
                "lines": 4,
                "subsections": []
            },
            {
                "name": "AUTHORS",
                "lines": 6,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "ssh-keygen — OpenSSH authentication key utility\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "ssh-keygen  [-q]  [-a  rounds]  [-b  bits]  [-C  comment]  [-f  outputkeyfile]  [-m  format]\n[-N                  newpassphrase]                  [-O                  option]\n[-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-w provider] [-Z cipher]\nssh-keygen  -p  [-a  rounds] [-f keyfile] [-m format] [-N newpassphrase] [-P oldpassphrase]\n[-Z cipher]\nssh-keygen -i [-f inputkeyfile] [-m keyformat]\nssh-keygen -e [-f inputkeyfile] [-m keyformat]\nssh-keygen -y [-f inputkeyfile]\nssh-keygen -c [-a rounds] [-C comment] [-f keyfile] [-P passphrase]\nssh-keygen -l [-v] [-E fingerprinthash] [-f inputkeyfile]\nssh-keygen -B [-f inputkeyfile]\nssh-keygen -D pkcs11\nssh-keygen -F hostname [-lv] [-f knownhostsfile]\nssh-keygen -H [-f knownhostsfile]\nssh-keygen -K [-a rounds] [-w provider]\nssh-keygen -R hostname [-f knownhostsfile]\nssh-keygen -r hostname [-g] [-f inputkeyfile]\nssh-keygen -M generate [-O option] outputfile\nssh-keygen -M screen [-f inputfile] [-O option] outputfile\nssh-keygen -I certificateidentity -s  cakey  [-hU]  [-D  pkcs11provider]  [-n  principals]\n[-O option] [-V validityinterval] [-z serialnumber] file ...\nssh-keygen -L [-f inputkeyfile]\nssh-keygen -A [-a rounds] [-f prefixpath]\nssh-keygen -k -f krlfile [-u] [-s capublic] [-z versionnumber] file ...\nssh-keygen -Q [-l] -f krlfile file ...\nssh-keygen -Y find-principals [-O option] -s signaturefile -f allowedsignersfile\nssh-keygen -Y match-principals -I signeridentity -f allowedsignersfile\nssh-keygen -Y check-novalidate [-O option] -n namespace -s signaturefile\nssh-keygen -Y sign [-O option] -f keyfile -n namespace file ...\nssh-keygen  -Y  verify [-O option] -f allowedsignersfile -I signeridentity -n namespace -s\nsignaturefile [-r revocationfile]\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "ssh-keygen generates, manages and converts authentication keys for  ssh(1).   ssh-keygen  can\ncreate keys for use by SSH protocol version 2.\n\nThe  type of key to be generated is specified with the -t option.  If invoked without any ar‐\nguments, ssh-keygen will generate an Ed25519 key.\n\nssh-keygen is also used to generate groups for use in Diffie-Hellman group exchange (DH-GEX).\nSee the “MODULI GENERATION” section for details.\n\nFinally, ssh-keygen can be used to generate and update Key  Revocation  Lists,  and  to  test\nwhether  given keys have been revoked by one.  See the “KEY REVOCATION LISTS” section for de‐\ntails.\n\nNormally each user wishing to use SSH with public key authentication runs this once to create\nthe   authentication   key    in    ~/.ssh/iddsa,    ~/.ssh/idecdsa,    ~/.ssh/idecdsask,\n~/.ssh/ided25519,  ~/.ssh/ided25519sk or ~/.ssh/idrsa.  Additionally, the system adminis‐\ntrator may use this to generate host keys.\n\nNormally this program generates the key and asks for a file in which  to  store  the  private\nkey.  The public key is stored in a file with the same name but “.pub” appended.  The program\nalso asks for a passphrase.  The passphrase may be empty to indicate no passphrase (host keys\nmust  have  an empty passphrase), or it may be a string of arbitrary length.  A passphrase is\nsimilar to a password, except it can be a phrase with a series of  words,  punctuation,  num‐\nbers,  whitespace,  or any string of characters you want.  Good passphrases are 10-30 charac‐\nters long, are not simple sentences or otherwise easily guessable (English prose has only 1-2\nbits of entropy per character, and provides very bad passphrases), and contain a mix of upper\nand lowercase letters, numbers, and  non-alphanumeric  characters.   The  passphrase  can  be\nchanged later by using the -p option.\n\nThere  is no way to recover a lost passphrase.  If the passphrase is lost or forgotten, a new\nkey must be generated and the corresponding public key copied to other machines.\n\nssh-keygen will by default write keys in an OpenSSH-specific format.   This  format  is  pre‐\nferred  as  it  offers  better protection for keys at rest as well as allowing storage of key\ncomments within the private key file itself.  The key comment may be useful to help  identify\nthe  key.   The  comment  is  initialized  to “user@host” when the key is created, but can be\nchanged using the -c option.\n\nIt is still possible for ssh-keygen to write the previously-used PEM format private keys  us‐\ning the -m flag.  This may be used when generating new keys, and existing new-format keys may\nbe converted using this option in conjunction with the -p (change passphrase) flag.\n\nAfter  a  key  is  generated, ssh-keygen will ask where the keys should be placed to be acti‐\nvated.\n\nThe options are as follows:\n",
                "subsections": [
                    {
                        "name": "-A",
                        "content": "already  exist.  The host keys are generated with the default key file path, an empty\npassphrase, default bits for the key type, and default comment.  If -f has also  been\nspecified,  its  argument  is  used as a prefix to the default path for the resulting\nhost key files.  This is used by system administration scripts to generate  new  host\nkeys.\n",
                        "flag": "-A"
                    },
                    {
                        "name": "-a _",
                        "content": "When  saving  a  private key, this option specifies the number of KDF (key derivation\nfunction, currently bcryptpbkdf(3)) rounds used.  Higher numbers  result  in  slower\npassphrase  verification  and  increased  resistance to brute-force password cracking\n(should the keys be stolen).  The default is 16 rounds.\n",
                        "flag": "-a"
                    },
                    {
                        "name": "-B",
                        "content": "",
                        "flag": "-B"
                    },
                    {
                        "name": "-b _",
                        "content": "Specifies the number of bits in the key to create.  For RSA keys, the minimum size is\n1024 bits and the default is 3072 bits.  Generally, 3072 bits  is  considered  suffi‐\ncient.   DSA  keys  must  be exactly 1024 bits as specified by FIPS 186-2.  For ECDSA\nkeys, the -b flag determines the key length by selecting from one of  three  elliptic\ncurve  sizes:  256,  384 or 521 bits.  Attempting to use bit lengths other than these\nthree values for ECDSA keys will fail.  ECDSA-SK, Ed25519 and Ed25519-SK keys have  a\nfixed length and the -b flag will be ignored.\n",
                        "flag": "-b"
                    },
                    {
                        "name": "-C _",
                        "content": "Provides a new comment.\n",
                        "flag": "-C"
                    },
                    {
                        "name": "-c",
                        "content": "prompt for the file containing the private keys, for the passphrase if  the  key  has\none, and for the new comment.\n",
                        "flag": "-c"
                    },
                    {
                        "name": "-D _",
                        "content": "Download the public keys provided by the PKCS#11 shared library pkcs11.  When used in\ncombination  with  -s, this option indicates that a CA key resides in a PKCS#11 token\n(see the “CERTIFICATES” section for details).\n",
                        "flag": "-D"
                    },
                    {
                        "name": "-E _",
                        "content": "Specifies the hash algorithm used when displaying key  fingerprints.   Valid  options\nare: “md5” and “sha256”.  The default is “sha256”.\n",
                        "flag": "-E"
                    },
                    {
                        "name": "-e",
                        "content": "lic  key in one of the formats specified by the -m option.  The default export format\nis “RFC4716”.  This option allows exporting OpenSSH keys for use by  other  programs,\nincluding several commercial SSH implementations.\n",
                        "flag": "-e"
                    },
                    {
                        "name": "-F _",
                        "content": "Search  for the specified hostname (with optional port number) in a knownhosts file,\nlisting any occurrences found.  This option is useful to find hashed  host  names  or\naddresses  and may also be used in conjunction with the -H option to print found keys\nin a hashed format.\n",
                        "flag": "-F"
                    },
                    {
                        "name": "-f _",
                        "content": "Specifies the filename of the key file.\n",
                        "flag": "-f"
                    },
                    {
                        "name": "-g       -r",
                        "content": "mand.\n",
                        "flag": "-r"
                    },
                    {
                        "name": "-H",
                        "content": "resentations within the specified file; the original content is moved to a file  with\na  .old  suffix.   These hashes may be used normally by ssh and sshd, but they do not\nreveal identifying information should the file's contents be disclosed.  This  option\nwill  not modify existing hashed hostnames and is therefore safe to use on files that\nmix hashed and non-hashed names.\n",
                        "flag": "-H"
                    },
                    {
                        "name": "-h",
                        "content": "“CERTIFICATES” section for details.\n",
                        "flag": "-h"
                    },
                    {
                        "name": "-I _",
                        "content": "Specify the key identity when signing a public key.  See the  “CERTIFICATES”  section\nfor details.\n",
                        "flag": "-I"
                    },
                    {
                        "name": "-i",
                        "content": "ified  by  the  -m  option and print an OpenSSH compatible private (or public) key to\nstdout.  This option allows importing keys from  other  software,  including  several\ncommercial SSH implementations.  The default import format is “RFC4716”.\n",
                        "flag": "-i"
                    },
                    {
                        "name": "-K",
                        "content": "be written to the current directory for each downloaded key.  If  multiple  FIDO  au‐\nthenticators are attached, keys will be downloaded from the first touched authentica‐\ntor.  See the “FIDO AUTHENTICATOR” section for more information.\n",
                        "flag": "-K"
                    },
                    {
                        "name": "-k",
                        "content": "tion specified via the -f flag that revokes every key or certificate presented on the\ncommand line.  Keys/certificates to be revoked may be specified by public key file or\nusing the format described in the “KEY REVOCATION LISTS” section.\n",
                        "flag": "-k"
                    },
                    {
                        "name": "-L",
                        "content": "",
                        "flag": "-L"
                    },
                    {
                        "name": "-l",
                        "content": "to find the matching public key file and prints its fingerprint.   If  combined  with\n-v, a visual ASCII art representation of the key is supplied with the fingerprint.\n",
                        "flag": "-l"
                    },
                    {
                        "name": "-M generate",
                        "content": "Generate candidate Diffie-Hellman Group Exchange (DH-GEX) parameters for eventual use\nby the ‘diffie-hellman-group-exchange-*’ key exchange methods.  The numbers generated\nby  this  operation must be further screened before use.  See the “MODULI GENERATION”\nsection for more information.\n",
                        "flag": "-M"
                    },
                    {
                        "name": "-M screen",
                        "content": "Screen candidate parameters for Diffie-Hellman Group Exchange.  This  will  accept  a\nlist  of  candidate  numbers and test that they are safe (Sophie Germain) primes with\nacceptable group generators.  The results of this  operation  may  be  added  to  the\n/etc/ssh/moduli file.  See the “MODULI GENERATION” section for more information.\n",
                        "flag": "-M"
                    },
                    {
                        "name": "-m _",
                        "content": "Specify  a key format for key generation, the -i (import), -e (export) conversion op‐\ntions, and the -p change passphrase operation.  The latter may be used to convert be‐\ntween OpenSSH private key and PEM private key formats.   The  supported  key  formats\nare:  “RFC4716”  (RFC 4716/SSH2 public or private key), “PKCS8” (PKCS8 public or pri‐\nvate key) or “PEM” (PEM public key).  By default OpenSSH will  write  newly-generated\nprivate  keys  in  its own format, but when converting public keys for export the de‐\nfault format is “RFC4716”.  Setting a format of “PEM” when generating or  updating  a\nsupported  private key type will cause the key to be stored in the legacy PEM private\nkey format.\n",
                        "flag": "-m"
                    },
                    {
                        "name": "-N _",
                        "content": "Provides the new passphrase.\n",
                        "flag": "-N"
                    },
                    {
                        "name": "-n _",
                        "content": "Specify one or more principals (user or host names) to be included in  a  certificate\nwhen  signing a key.  Multiple principals may be specified, separated by commas.  See\nthe “CERTIFICATES” section for details.\n",
                        "flag": "-n"
                    },
                    {
                        "name": "-O _",
                        "content": "Specify a key/value option.  These are specific to the operation that ssh-keygen  has\nbeen requested to perform.\n\nWhen  signing  certificates,  one of the options listed in the “CERTIFICATES” section\nmay be specified here.\n\nWhen performing moduli generation or screening, one of  the  options  listed  in  the\n“MODULI GENERATION” section may be specified.\n\nWhen  generating  FIDO  authenticator-backed  keys,  the  options listed in the “FIDO\nAUTHENTICATOR” section may be specified.\n\nWhen performing signature-related options using the -Y flag,  the  following  options\nare accepted:\n\nhashalg=algorithm\nSelects  the  hash  algorithm  to  use  for hashing the message to be signed.\nValid algorithms are “sha256” and “sha512.” The default is “sha512.”\n\nprint-pubkey\nPrint the full public key to standard output after signature verification.\n\nverify-time=timestamp\nSpecifies a time to use when validating signatures  instead  of  the  current\ntime.   The  time may be specified as a date or time in the YYYYMMDD[Z] or in\nYYYYMMDDHHMM[SS][Z] formats.  Dates and times will be interpreted in the cur‐\nrent system time zone unless suffixed with a Z character, which  causes  them\nto be interpreted in the UTC time zone.\n\nWhen  generating  SSHFP DNS records from public keys using the -r flag, the following\noptions are accepted:\n\nhashalg=algorithm\nSelects a hash algorithm to use when printing  SSHFP  records  using  the  -D\nflag.   Valid  algorithms  are  “sha1” and “sha256”.  The default is to print\nboth.\n\nThe -O option may be specified multiple times.\n",
                        "flag": "-O"
                    },
                    {
                        "name": "-P _",
                        "content": "Provides the (old) passphrase.\n",
                        "flag": "-P"
                    },
                    {
                        "name": "-p",
                        "content": "vate key.  The program will prompt for the file containing the private key,  for  the\nold passphrase, and twice for the new passphrase.\n",
                        "flag": "-p"
                    },
                    {
                        "name": "-Q       -l",
                        "content": "then the contents of the KRL will be printed.\n",
                        "flag": "-l"
                    },
                    {
                        "name": "-q",
                        "content": "",
                        "flag": "-q"
                    },
                    {
                        "name": "-R _",
                        "content": "Removes all keys belonging to the specified hostname (with optional port number) from\na knownhosts file.  This option is useful to delete hashed hosts (see the -H  option\nabove).\n",
                        "flag": "-R"
                    },
                    {
                        "name": "-r _",
                        "content": "Print  the  SSHFP fingerprint resource record named hostname for the specified public\nkey file.\n",
                        "flag": "-r"
                    },
                    {
                        "name": "-s _",
                        "content": "Certify (sign) a public key using the specified CA key.  See the “CERTIFICATES”  sec‐\ntion for details.\n\nWhen  generating  a  KRL,  -s specifies a path to a CA public key file used to revoke\ncertificates directly by key ID or serial number.  See  the  “KEY  REVOCATION  LISTS”\nsection for details.\n",
                        "flag": "-s"
                    },
                    {
                        "name": "-t dsa",
                        "content": "Specifies  the  type  of  key  to  create.   The  possible values are “dsa”, “ecdsa”,\n“ecdsa-sk”, “ed25519”, “ed25519-sk”, or “rsa”.\n\nThis flag may also be used to specify the desired signature type  when  signing  cer‐\ntificates  using  an  RSA CA key.  The available RSA signature variants are “ssh-rsa”\n(SHA1 signatures, not recommended), “rsa-sha2-256”, and “rsa-sha2-512” (the default).\n",
                        "flag": "-t"
                    },
                    {
                        "name": "-U       -s  -Y sign",
                        "content": "sides in a ssh-agent(1).  See the “CERTIFICATES” section for more information.\n",
                        "flag": "-Y"
                    },
                    {
                        "name": "-u       -k",
                        "content": "the existing KRL rather than a new KRL being created.\n",
                        "flag": "-k"
                    },
                    {
                        "name": "-V _",
                        "content": "Specify a validity interval when signing a certificate.  A validity interval may con‐\nsist of a single time, indicating that the certificate is valid beginning now and ex‐\npiring at that time, or may consist of two times separated by a colon to indicate  an\nexplicit time interval.\n\nThe start time may be specified as:\n•   The string “always” to indicate the certificate has no specified start time.\n•   A date or time in the system time zone formatted as YYYYMMDD or YYYYMMDDHHMM[SS].\n•   A date or time in the UTC time zone as YYYYMMDDZ or YYYYMMDDHHMM[SS]Z.\n•   A  relative  time  before the current system time consisting of a minus sign fol‐\nlowed by an interval in the format described  in  the  TIME  FORMATS  section  of\nsshdconfig(5).\n•   A  raw  seconds since epoch (Jan 1 1970 00:00:00 UTC) as a hexadecimal number be‐\nginning with “0x”.\n\nThe end time may be specified similarly to the start time:\n•   The string “forever” to indicate the certificate has no specified end time.\n•   A date or time in the system time zone formatted as YYYYMMDD or YYYYMMDDHHMM[SS].\n•   A date or time in the UTC time zone as YYYYMMDDZ or YYYYMMDDHHMM[SS]Z.\n•   A relative time after the current system time consisting of a plus sign  followed\nby  an  interval  in  the  format  described  in  the  TIME  FORMATS  section  of\nsshdconfig(5).\n•   A raw seconds since epoch (Jan 1 1970 00:00:00 UTC) as a hexadecimal  number  be‐\nginning with “0x”.\n\nFor example:\n\n+52w1d  Valid from now to 52 weeks and one day from now.\n\n-4w:+4w\nValid from four weeks ago to four weeks from now.\n\n20100101123000:20110101123000\nValid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011.\n\n20100101123000Z:20110101123000Z\nSimilar,  but  interpreted  in  the UTC time zone rather than the system time\nzone.\n\n-1d:20110101\nValid from yesterday to midnight, January 1st, 2011.\n\n0x1:0x2000000000\nValid from roughly early 1970 to May 2033.\n\n-1m:forever\nValid from one minute ago and never expiring.\n",
                        "flag": "-V"
                    },
                    {
                        "name": "-v",
                        "content": "This  is  helpful  for debugging moduli generation.  Multiple -v options increase the\nverbosity.  The maximum is 3.\n",
                        "flag": "-v"
                    },
                    {
                        "name": "-w _",
                        "content": "Specifies a path to a library that will be used  when  creating  FIDO  authenticator-\nhosted keys, overriding the default of using the internal USB HID support.\n",
                        "flag": "-w"
                    },
                    {
                        "name": "-Y find-principals",
                        "content": "Find  the  principal(s) associated with the public key of a signature, provided using\nthe -s flag in an authorized signers file provided using the -f flag.  The format  of\nthe  allowed  signers  file is documented in the “ALLOWED SIGNERS” section below.  If\none or more matching principals are found, they are returned on standard output.\n",
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y match-principals",
                        "content": "Find principal matching the principal name provided using the -I flag in  the  autho‐\nrized  signers  file specified using the -f flag.  If one or more matching principals\nare found, they are returned on standard output.\n",
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y check-novalidate",
                        "content": "Checks that a signature generated using ssh-keygen -Y sign  has  a  valid  structure.\nThis  does not validate if a signature comes from an authorized signer.  When testing\na signature, ssh-keygen accepts a message on standard input and a signature namespace\nusing -n.  A file containing the corresponding signature must also be supplied  using\nthe  -s flag.  Successful testing of the signature is signalled by ssh-keygen return‐\ning a zero exit status.\n",
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y sign",
                        "content": "Cryptographically sign a  file  or  some  data  using  an  SSH  key.   When  signing,\nssh-keygen  accepts  zero or more files to sign on the command-line - if no files are\nspecified then ssh-keygen will sign data presented on standard input.  Signatures are\nwritten to the path of the input file with “.sig” appended, or to standard output  if\nthe message to be signed was read from standard input.\n\nThe  key  used for signing is specified using the -f option and may refer to either a\nprivate key, or a public key with the private half available  via  ssh-agent(1).   An\nadditional  signature namespace, used to prevent signature confusion across different\ndomains of use (e.g. file signing vs email signing) must be provided via the -n flag.\nNamespaces are arbitrary strings, and may include: “file” for file  signing,  “email”\nfor email signing.  For custom uses, it is recommended to use names following a NAME‐\nSPACE@YOUR.DOMAIN pattern to generate unambiguous namespaces.\n",
                        "flag": "-Y"
                    },
                    {
                        "name": "-Y verify",
                        "content": "Request  to verify a signature generated using ssh-keygen -Y sign as described above.\nWhen verifying a signature, ssh-keygen accepts a message on standard input and a sig‐\nnature namespace using -n.  A file containing the corresponding signature  must  also\nbe  supplied  using the -s flag, along with the identity of the signer using -I and a\nlist of allowed signers via the -f flag.  The format of the allowed signers  file  is\ndocumented  in  the  “ALLOWED SIGNERS” section below.  A file containing revoked keys\ncan be passed using the -r flag.  The revocation file may be a KRL or a  one-per-line\nlist of public keys.  Successful verification by an authorized signer is signalled by\nssh-keygen returning a zero exit status.\n",
                        "flag": "-Y"
                    },
                    {
                        "name": "-y",
                        "content": "to stdout.\n",
                        "flag": "-y"
                    },
                    {
                        "name": "-Z _",
                        "content": "Specifies the cipher to use for encryption when writing an OpenSSH-format private key\nfile.  The list of available ciphers may be obtained using \"ssh -Q cipher\".  The  de‐\nfault is “aes256-ctr”.\n",
                        "flag": "-Z"
                    },
                    {
                        "name": "-z _",
                        "content": "Specifies  a serial number to be embedded in the certificate to distinguish this cer‐\ntificate from others from the same CA.  If the serialnumber is prefixed with  a  ‘+’\ncharacter,  then the serial number will be incremented for each certificate signed on\na single command-line.  The default serial number is zero.\n\nWhen generating a KRL, the -z flag is used to specify a KRL version number.\n",
                        "flag": "-z"
                    }
                ]
            },
            "MODULI GENERATION": {
                "content": "ssh-keygen may be used to generate groups for the Diffie-Hellman Group Exchange (DH-GEX) pro‐\ntocol.  Generating these groups is a two-step process: first, candidate primes are  generated\nusing a fast, but memory intensive process.  These candidate primes are then tested for suit‐\nability (a CPU-intensive process).\n\nGeneration  of  primes  is performed using the -M generate option.  The desired length of the\nprimes may be specified by the -O bits option.  For example:\n\n# ssh-keygen -M generate -O bits=2048 moduli-2048.candidates\n\nBy default, the search for primes begins at a random point in the desired length range.  This\nmay be overridden using the -O start option, which specifies  a  different  start  point  (in\nhex).\n\nOnce  a  set  of candidates have been generated, they must be screened for suitability.  This\nmay be performed using the -M screen option.  In this mode ssh-keygen  will  read  candidates\nfrom standard input (or a file specified using the -f option).  For example:\n\n# ssh-keygen -M screen -f moduli-2048.candidates moduli-2048\n\nBy  default, each candidate will be subjected to 100 primality tests.  This may be overridden\nusing the -O prime-tests option.  The DH generator value will be chosen automatically for the\nprime under consideration.  If a specific generator is desired, it may be requested using the",
                "subsections": [
                    {
                        "name": "-O generator",
                        "content": "Screened DH groups may be installed in /etc/ssh/moduli.  It is important that this file  con‐\ntains moduli of a range of bit lengths.\n\nA number of options are available for moduli generation and screening via the -O flag:\n\nlines=number\nExit  after  screening  the  specified  number of lines while performing DH candidate\nscreening.\n\nstart-line=line-number\nStart screening at the specified line number while performing DH candidate screening.\n\ncheckpoint=filename\nWrite the last line processed to the specified file  while  performing  DH  candidate\nscreening.   This will be used to skip lines in the input file that have already been\nprocessed if the job is restarted.\n\nmemory=mbytes\nSpecify the amount of memory to use (in megabytes) when generating  candidate  moduli\nfor DH-GEX.\n\nstart=hex-value\nSpecify start point (in hex) when generating candidate moduli for DH-GEX.\n\ngenerator=value\nSpecify desired generator (in decimal) when testing candidate moduli for DH-GEX.\n",
                        "flag": "-O"
                    }
                ]
            },
            "CERTIFICATES": {
                "content": "ssh-keygen supports signing of keys to produce certificates that may be used for user or host\nauthentication.   Certificates  consist  of  a public key, some identity information, zero or\nmore principal (user or host) names and a set of options that are signed by  a  Certification\nAuthority  (CA) key.  Clients or servers may then trust only the CA key and verify its signa‐\nture on a certificate rather than trusting many user/host keys.  Note that  OpenSSH  certifi‐\ncates are a different, and much simpler, format to the X.509 certificates used in ssl(8).\n\nssh-keygen supports two types of certificates: user and host.  User certificates authenticate\nusers  to servers, whereas host certificates authenticate server hosts to users.  To generate\na user certificate:\n\n$ ssh-keygen -s /path/to/cakey -I keyid /path/to/userkey.pub\n\nThe resultant certificate will be placed in /path/to/userkey-cert.pub.  A  host  certificate\nrequires the -h option:\n\n$ ssh-keygen -s /path/to/cakey -I keyid -h /path/to/hostkey.pub\n\nThe host certificate will be output to /path/to/hostkey-cert.pub.\n\nIt  is  possible  to sign using a CA key stored in a PKCS#11 token by providing the token li‐\nbrary using -D and identifying the CA key by providing its public half as an argument to -s:\n\n$ ssh-keygen -s cakey.pub -D libpkcs11.so -I keyid userkey.pub\n\nSimilarly, it is possible for the CA key to be hosted in a ssh-agent(1).  This  is  indicated\nby the -U flag and, again, the CA key must be identified by its public half.\n\n$ ssh-keygen -Us cakey.pub -I keyid userkey.pub\n\nIn  all cases, keyid is a \"key identifier\" that is logged by the server when the certificate\nis used for authentication.\n\nCertificates may be limited to be valid for a set of principal  (user/host)  names.   By  de‐\nfault,  generated  certificates  are valid for all users or hosts.  To generate a certificate\nfor a specified set of principals:\n\n$ ssh-keygen -s cakey -I keyid -n user1,user2 userkey.pub\n$ ssh-keygen -s cakey -I keyid -h -n host.domain hostkey.pub\n\nAdditional limitations on the validity and use of user certificates may be specified  through\ncertificate  options.   A  certificate option may disable features of the SSH session, may be\nvalid only when presented from particular source addresses or may force the use of a specific\ncommand.\n\nThe options that are valid for user certificates are:\n\nclear   Clear all enabled permissions.  This is useful for clearing the default set  of  per‐\nmissions so permissions may be added individually.\n\ncritical:name[=contents]\nextension:name[=contents]\nIncludes  an  arbitrary certificate critical option or extension.  The specified name\nshould include a domain suffix, e.g. “name@example.com”.  If  contents  is  specified\nthen it is included as the contents of the extension/option encoded as a string, oth‐\nerwise  the extension/option is created with no contents (usually indicating a flag).\nExtensions may be ignored by a client or server that does not recognise them, whereas\nunknown critical options will cause the certificate to be refused.\n\nforce-command=command\nForces the execution of command instead of any shell or command specified by the user\nwhen the certificate is used for authentication.\n",
                "subsections": [
                    {
                        "name": "no-agent-forwarding",
                        "content": "Disable ssh-agent(1) forwarding (permitted by default).\n"
                    },
                    {
                        "name": "no-port-forwarding",
                        "content": "Disable port forwarding (permitted by default).\n\nno-pty  Disable PTY allocation (permitted by default).\n"
                    },
                    {
                        "name": "no-user-rc",
                        "content": "Disable execution of ~/.ssh/rc by sshd(8) (permitted by default).\n"
                    },
                    {
                        "name": "no-x11-forwarding",
                        "content": "Disable X11 forwarding (permitted by default).\n"
                    },
                    {
                        "name": "permit-agent-forwarding",
                        "content": "Allows ssh-agent(1) forwarding.\n"
                    },
                    {
                        "name": "permit-port-forwarding",
                        "content": "Allows port forwarding.\n"
                    },
                    {
                        "name": "permit-pty",
                        "content": "Allows PTY allocation.\n"
                    },
                    {
                        "name": "permit-user-rc",
                        "content": "Allows execution of ~/.ssh/rc by sshd(8).\n"
                    },
                    {
                        "name": "permit-X11-forwarding",
                        "content": "Allows X11 forwarding.\n"
                    },
                    {
                        "name": "no-touch-required",
                        "content": "Do not require signatures made using this key include demonstration of user  presence\n(e.g.  by having the user touch the authenticator).  This option only makes sense for\nthe FIDO authenticator algorithms ecdsa-sk and ed25519-sk.\n\nsource-address=addresslist\nRestrict the source addresses from which the certificate is  considered  valid.   The\naddresslist  is  a comma-separated list of one or more address/netmask pairs in CIDR\nformat.\n"
                    },
                    {
                        "name": "verify-required",
                        "content": "Require signatures made using this key indicate that the  user  was  first  verified.\nThis  option  only  makes  sense  for  the FIDO authenticator algorithms ecdsa-sk and\ned25519-sk.  Currently PIN authentication is the only supported verification  method,\nbut other methods may be supported in the future.\n\nAt present, no standard options are valid for host keys.\n\nFinally, certificates may be defined with a validity lifetime.  The -V option allows specifi‐\ncation of certificate start and end times.  A certificate that is presented at a time outside\nthis  range  will  not be considered valid.  By default, certificates are valid from the Unix\nEpoch to the distant future.\n\nFor certificates to be used for user or host  authentication,  the  CA  public  key  must  be\ntrusted by sshd(8) or ssh(1).  Refer to those manual pages for details.\n"
                    }
                ]
            },
            "FIDO AUTHENTICATOR": {
                "content": "ssh-keygen  is  able to generate FIDO authenticator-backed keys, after which they may be used\nmuch like any other key type supported by OpenSSH, so long as the hardware  authenticator  is\nattached  when  the keys are used.  FIDO authenticators generally require the user to explic‐\nitly authorise operations by touching or tapping them.  FIDO keys consist of two parts: a key\nhandle part stored in the private key file on disk, and a  per-device  private  key  that  is\nunique  to  each  FIDO authenticator and that cannot be exported from the authenticator hard‐\nware.  These are combined by the hardware at authentication time to derive the real key  that\nis used to sign authentication challenges.  Supported key types are ecdsa-sk and ed25519-sk.\n\nThe options that are valid for FIDO keys are:\n",
                "subsections": [
                    {
                        "name": "application",
                        "content": "Override  the  default  FIDO application/origin string of “ssh:”.  This may be useful\nwhen generating host or domain-specific resident  keys.   The  specified  application\nstring must begin with “ssh:”.\n\nchallenge=path\nSpecifies  a path to a challenge string that will be passed to the FIDO authenticator\nduring key generation.  The challenge string may be used as part  of  an  out-of-band\nprotocol for key enrollment (a random challenge is used by default).\n\ndevice  Explicitly  specify  a  fido(4)  device to use, rather than letting the authenticator\nmiddleware select one.\n"
                    },
                    {
                        "name": "no-touch-required",
                        "content": "Indicate that the generated private key should not require touch events  (user  pres‐\nence)  when  making signatures.  Note that sshd(8) will refuse such signatures by de‐\nfault, unless overridden via an authorizedkeys option.\n"
                    },
                    {
                        "name": "resident",
                        "content": "Indicate that the key handle should be stored on the FIDO authenticator itself.  This\nmakes it easier to use the authenticator on multiple computers.  Resident keys may be\nsupported on FIDO2 authenticators and typically require that a PIN be set on the  au‐\nthenticator  prior  to generation.  Resident keys may be loaded off the authenticator\nusing ssh-add(1).  Storing both parts of a key on a FIDO authenticator increases  the\nlikelihood of an attacker being able to use a stolen authenticator device.\n\nuser    A  username  to be associated with a resident key, overriding the empty default user‐\nname.  Specifying a username may be useful when generating multiple resident keys for\nthe same application name.\n"
                    },
                    {
                        "name": "verify-required",
                        "content": "Indicate that this private key should require user verification for  each  signature.\nNot all FIDO authenticators support this option.  Currently PIN authentication is the\nonly supported verification method, but other methods may be supported in the future.\n\nwrite-attestation=path\nMay  be used at key generation time to record the attestation data returned from FIDO\nauthenticators during key generation.  This information is potentially sensitive.  By\ndefault, this information is discarded.\n"
                    }
                ]
            },
            "KEY REVOCATION LISTS": {
                "content": "ssh-keygen is able to manage OpenSSH format Key Revocation Lists (KRLs).  These binary  files\nspecify  keys  or  certificates to be revoked using a compact format, taking as little as one\nbit per certificate if they are being revoked by serial number.\n\nKRLs may be generated using the -k flag.  This option reads one or more files from  the  com‐\nmand line and generates a new KRL.  The files may either contain a KRL specification (see be‐\nlow)  or  public  keys,  listed one per line.  Plain public keys are revoked by listing their\nhash or contents in the KRL and certificates revoked by serial number or key ID (if the  ser‐\nial is zero or not available).\n\nRevoking keys using a KRL specification offers explicit control over the types of record used\nto  revoke  keys  and  may be used to directly revoke certificates by serial number or key ID\nwithout having the complete original certificate on hand.  A KRL  specification  consists  of\nlines  containing one of the following directives followed by a colon and some directive-spe‐\ncific information.\n\nserial: serialnumber[-serialnumber]\nRevokes a certificate with the specified serial number.  Serial  numbers  are  64-bit\nvalues, not including zero and may be expressed in decimal, hex or octal.  If two se‐\nrial  numbers  are  specified separated by a hyphen, then the range of serial numbers\nincluding and between each is revoked.  The CA key must have been  specified  on  the\nssh-keygen command line using the -s option.\n\nid: keyid\nRevokes  a  certificate  with the specified key ID string.  The CA key must have been\nspecified on the ssh-keygen command line using the -s option.\n\nkey: publickey\nRevokes the specified key.  If a certificate is listed, then it is revoked as a plain\npublic key.\n\nsha1: publickey\nRevokes the specified key by including its SHA1 hash in the KRL.\n\nsha256: publickey\nRevokes the specified key by including its SHA256 hash in the KRL.  KRLs that  revoke\nkeys by SHA256 hash are not supported by OpenSSH versions prior to 7.9.\n\nhash: fingerprint\nRevokes a key using a fingerprint hash, as obtained from a sshd(8) authentication log\nmessage  or  the ssh-keygen -l flag.  Only SHA256 fingerprints are supported here and\nresultant KRLs are not supported by OpenSSH versions prior to 7.9.\n\nKRLs may be updated using the -u flag in addition to -k.  When this option is specified, keys\nlisted via the command line are merged into the KRL, adding to those already there.\n\nIt is also possible, given a KRL, to test whether it revokes a particular key (or keys).  The",
                "subsections": [
                    {
                        "name": "-Q",
                        "content": "key  listed  on  the  command line has been revoked (or an error encountered) then ssh-keygen\nwill exit with a non-zero exit status.  A zero exit status will only be returned  if  no  key\nwas revoked.\n",
                        "flag": "-Q"
                    }
                ]
            },
            "ALLOWED SIGNERS": {
                "content": "When  verifying signatures, ssh-keygen uses a simple list of identities and keys to determine\nwhether a signature comes from an authorized source.  This \"allowed signers\" file uses a for‐\nmat patterned after the AUTHORIZEDKEYS FILE FORMAT described in sshd(8).  Each line  of  the\nfile  contains the following space-separated fields: principals, options, keytype, base64-en‐\ncoded key.  Empty lines and lines starting with a ‘#’ are ignored as comments.\n\nThe principals field is a pattern-list (see PATTERNS in sshconfig(5)) consisting of  one  or\nmore comma-separated USER@DOMAIN identity patterns that are accepted for signing.  When veri‐\nfying,  the identity presented via the -I option must match a principals pattern in order for\nthe corresponding key to be considered acceptable for verification.\n\nThe options (if present) consist of comma-separated option  specifications.   No  spaces  are\npermitted,  except  within  double quotes.  The following option specifications are supported\n(note that option keywords are case-insensitive):\n",
                "subsections": [
                    {
                        "name": "cert-authority",
                        "content": "Indicates that this key is accepted as a certificate authority (CA) and that certifi‐\ncates signed by this CA may be accepted for verification.\n\nnamespaces=namespace-list\nSpecifies a pattern-list of namespaces that are accepted for this key.  If  this  op‐\ntion  is  present,  the signature namespace embedded in the signature object and pre‐\nsented on the verification command-line must match the specified list before the  key\nwill be considered acceptable.\n\nvalid-after=timestamp\nIndicates  that  the  key is valid for use at or after the specified timestamp, which\nmay be a date or time in the YYYYMMDD[Z] or YYYYMMDDHHMM[SS][Z] formats.   Dates  and\ntimes  will  be  interpreted in the current system time zone unless suffixed with a Z\ncharacter, which causes them to be interpreted in the UTC time zone.\n\nvalid-before=timestamp\nIndicates that the key is valid for use at or before the specified timestamp.\n\nWhen verifying signatures made by certificates, the expected principal name must  match  both\nthe  principals  pattern  in the allowed signers file and the principals embedded in the cer‐\ntificate itself.\n\nAn example allowed signers file:\n\n# Comments allowed at start of line\nuser1@example.com,user2@example.com ssh-rsa AAAAX1...\n# A certificate authority, trusted for all principals in a domain.\n*@example.com cert-authority ssh-ed25519 AAAB4...\n# A key that is accepted only for file signing.\nuser2@example.com namespaces=\"file\" ssh-ed25519 AAA41...\n"
                    }
                ]
            },
            "ENVIRONMENT": {
                "content": "SSHSKPROVIDER\nSpecifies a path to a library that will be used when loading any FIDO  authenticator-\nhosted keys, overriding the default of using the built-in USB HID support.\n",
                "subsections": []
            },
            "FILES": {
                "content": "~/.ssh/iddsa\n~/.ssh/idecdsa\n~/.ssh/idecdsask\n~/.ssh/ided25519\n~/.ssh/ided25519sk\n~/.ssh/idrsa\nContains  the  DSA,  ECDSA, authenticator-hosted ECDSA, Ed25519, authenticator-hosted\nEd25519 or RSA authentication identity of the user.  This file should not be readable\nby anyone but the user.  It is possible to specify a passphrase when  generating  the\nkey;  that  passphrase  will  be  used to encrypt the private part of this file using\n128-bit AES.  This file is not automatically accessed by ssh-keygen but it is offered\nas the default file for the private key.  ssh(1) will read this file when a login at‐\ntempt is made.\n\n~/.ssh/iddsa.pub\n~/.ssh/idecdsa.pub\n~/.ssh/idecdsask.pub\n~/.ssh/ided25519.pub\n~/.ssh/ided25519sk.pub\n~/.ssh/idrsa.pub\nContains the DSA, ECDSA, authenticator-hosted  ECDSA,  Ed25519,  authenticator-hosted\nEd25519  or  RSA  public key for authentication.  The contents of this file should be\nadded to ~/.ssh/authorizedkeys on all machines where the user wishes to log in using\npublic key authentication.  There is no need to keep the contents of  this  file  se‐\ncret.\n\n/etc/ssh/moduli\nContains  Diffie-Hellman  groups  used  for  DH-GEX.  The file format is described in\nmoduli(5).\n",
                "subsections": []
            },
            "SEE ALSO": {
                "content": "ssh(1), ssh-add(1), ssh-agent(1), moduli(5), sshd(8)\n\nThe Secure Shell (SSH) Public Key File Format, RFC 4716, 2006.\n",
                "subsections": []
            },
            "AUTHORS": {
                "content": "OpenSSH is a derivative of the original and free ssh 1.2.12 release by  Tatu  Ylonen.   Aaron\nCampbell,  Bob  Beck,  Markus  Friedl,  Niels Provos, Theo de Raadt and Dug Song removed many\nbugs, re-added newer features and created OpenSSH.  Markus Friedl contributed the support for\nSSH protocol versions 1.5 and 2.0.\n\nDebian                                    September 4, 2023                            SSH-KEYGEN(1)",
                "subsections": []
            }
        }
    }
}