ssh-keygen и его параметр -Z в OpenBSD и RHEL

# A "random" date between 2000-01-01 and 2025-12-28
# Only uses day 01 to 28 
rand_date() {
    printf "%4d-%02d-%02d" $((RANDOM%25+2000)) $((RANDOM%12+1)) $((RANDOM%28+1))
}

csv_data() {
    for ((i=1; i<="$1"; i++)); do printf "%d,%s\n" $i $(rand_date); done
}
$ time (csv_data 1000000 > data.csv)
real    7m26.683s
user    0m36.376s
sys 1m57.768s

Perl, наверное, быстрее, давайте попробуем

$ cat data.pl
#!/usr/bin/perl
$, = ",";
$\ = "\n";

sub rand_date {
    sprintf "%4d-%02d-%02d", int(rand(25))+2000, int(rand(12))+1, int(rand(28))+1;
}

sub csv_data {
    my $n = shift;
    for ($i = 1; $i <= $n; $i++) {
        print $i, rand_date();
    }
}

csv_data(1_000_000);
$ time (perl data.pl > data.csv)

real    0m0.881s
user    0m0.876s
sys 0m0.004s

Хм, да, чуть быстрее...

4
23.12.2019, 23:39
1 ответ

Расширение ответа @mosvy, так как он немного длиннее, чем просто комментарий.

RHEL6 был выпущен с OpenSSH 5.3p1 в 2009 году (Я думаю, что изначально это была более старая версия, но сейчас у меня ее нет под рукой )и с годами новые функции были реализованы или перенесены из основной ветки разработки, включая эту один для сертификатов SSH.

Но это было гораздо позже. В течение нескольких лет была первоначальная поддержка смарт-карт через NSS (в журнале изменений, датированном 2007 годом ), который заменил переключатель -nв ssh-keygen. Как это работало, описано, например в этом сообщении в блоге от 2008 года (. Я не могу найти, был ли этот патч предложен вышестоящим или почему он был отклонен, но в наши дни смарт-карты используются напрямую через стандартный PKCS #11 интерфейс ). Для получения дополнительной информации см. openssh -5.3 -p1 -nss -keys.patch из исходного rpm, ссылка на который приведена в предыдущем ответе.

Лишь через некоторое время после выпуска OpenSSH 5.4p1 с поддержкой сертификатов было принято решение о переносе этой конкретной функции (в список изменений, датированный 2013 годом ), и возник конфликт с существующим переключателем (ssh-keygenтеперь использует все буквы алфавита, если я хорошо помню ), и единственным способом резервного переноса этой функции было перемещение опции на другой переключатель (существующие сценарии не могли быть нарушены незначительным обновлением )и документировать это.

Вот и вся история.

1
19.04.2020, 10:46

Теги

Похожие вопросы