KeyRegenerationInterval在SSH2中有任何影响吗?

Hub*_*ast 4 configuration sshd

我正在设置一个新的Linux服务器,我正在编辑sshd_config.我将使用协议版本2(无论如何这是默认的):

Protocol 2
Run Code Online (Sandbox Code Playgroud)

但是在默认的配置文件中我也发现了这两行:

KeyRegenerationInterval 3600
ServerKeyBits 768
Run Code Online (Sandbox Code Playgroud)

关于KeyRegenerationInterval的Manpage sshd_config(5)说:

在协议版本1中,短暂的服务器密钥会在这么多秒后自动重新生成(如果已使用).再生的目的是防止通过稍后进入机器并窃取密钥来解密捕获的会话.密钥永远不会存储在任何地方.如果值为0,则永远不会重新生成密钥.默认值为3600(秒).

所以我知道这个参数在SSH1中的作用.但我不使用SSH1.我使用默认版本SSH2,但是联机帮助页没有提供有关KeyRegenerationInterval协议版本2 的影响的信息.在协议版本2中有KeyRegenerationInterval任何影响吗?那怎么样ServerKeyBits

如果我在设置时将此设置保留在配置文件中会发生什么Protocol 2?当我删除这两行时会发生什么?

如果协议版本设置为2,我猜这两个参数会被忽略.但这只是猜测.从我读到现在到目前为止我无法确定.你知道(不猜)什么样的影响KeyRegenerationInterval,并ServerKeyBits在SSH2?

小智 6

我相信你已经知道了.我只是不想留下没有答案的问题.这些选项(KeyRegenerationInterval和ServerKeyBits)会影响为SSH协议1生成的服务器密钥.如果要求连接遵循协议2,则不必担心这一点.


rus*_*tyx 3

TL;DR:不,这些选项对 SSH-2 没有影响(并且自 2016 年以来删除了 SSH-1 支持)。

当不确定时,源代码是最好的文档。

如果我们在整个 OpenSSH 源代码中搜索ServerKeyBits和,我们只能在以下位置找到KeyRegenerationIntervalservconf.c

        { "serverkeybits", sDeprecated, SSHCFG_GLOBAL },
        . . .
        { "keyregenerationinterval", sDeprecated, SSHCFG_GLOBAL },
        . . .

    case sDeprecated:
    case sIgnore:
    case sUnsupported:
        do_log2(opcode == sIgnore ?
            SYSLOG_LEVEL_DEBUG2 : SYSLOG_LEVEL_INFO,
            "%s line %d: %s option %s", filename, linenum,
            opcode == sUnsupported ? "Unsupported" : "Deprecated", arg);
        while (arg)
            arg = strdelim(&cp);
        break;
Run Code Online (Sandbox Code Playgroud)

换句话说,这两个选项都只是打印一条弃用警告,并且没有任何作用

然后使用责备功能,我们发现这些选项在 2016 年 8 月 23 日的提交c38ea6348中被删除(OpenSSH 7.4p1):

        { "serverkeybits", sDeprecated, SSHCFG_GLOBAL },
        . . .
        { "keyregenerationinterval", sDeprecated, SSHCFG_GLOBAL },
        . . .

    case sDeprecated:
    case sIgnore:
    case sUnsupported:
        do_log2(opcode == sIgnore ?
            SYSLOG_LEVEL_DEBUG2 : SYSLOG_LEVEL_INFO,
            "%s line %d: %s option %s", filename, linenum,
            opcode == sUnsupported ? "Unsupported" : "Deprecated", arg);
        while (arg)
            arg = strdelim(&cp);
        break;
Run Code Online (Sandbox Code Playgroud)

在此之前它们仅用于 SSH-1。例如KeyRegenerationInterval

    { "keyregenerationinterval", sKeyRegenerationTime, SSHCFG_GLOBAL },
    . . .

    case sKeyRegenerationTime:
        intptr = &options->key_regeneration_time;
        goto parse_time;
Run Code Online (Sandbox Code Playgroud)

用于sshd.c/L1442

            if ((options.protocol & SSH_PROTO_1) &&
                key_used == 0) {
                /* Schedule server key regeneration alarm. */
                signal(SIGALRM, key_regeneration_alarm);
                alarm(options.key_regeneration_time);
                key_used = 1;
            }
Run Code Online (Sandbox Code Playgroud)

注意:对于 SSH-2,有更强大的RekeyLimit.