Генерация паролей с помощью omgopass

Установка

sudo apt update
sudo apt -y install npm
npm install omgopass --save

Создаём скрипт pass.mjs

vim pass.mjs
import g from "omgopass";
 
const rand = n => Math.floor(Math.random() * n);
 
// shuffle (Fisher–Yates)
const shuffle = a => {
  for (let i = a.length - 1; i > 0; i--) {
    const j = rand(i + 1);
    [a[i], a[j]] = [a[j], a[i]];
  }
  return a;
};
 
// колода цифр
let deck = [];
const nextDigit = () => {
  if (deck.length === 0) deck = shuffle([...Array(10).keys()]);
  return deck.pop();
};
 
const block = () => {
  const letters = g({ hasNumbers: false })
    .replace(/[^\p{L}]/gu, "")
    .slice(0, 2)
    .split("");
 
  const digits = [nextDigit(), nextDigit()].map(String);
 
  const res = Array(4);
 
  // допустимые пары позиций (без соседства)
  const positions = [
    [0, 2],
    [0, 3],
    [1, 3]
  ];
 
  const [p1, p2] = positions[rand(positions.length)];
 
  res[p1] = digits[0];
  res[p2] = digits[1];
 
  let li = 0;
  for (let i = 0; i < 4; i++) {
    if (!res[i]) res[i] = letters[li++];
  }
 
  return res.join("");
};
 
console.log(Array.from({ length: 20 }, block).join("-"));

Запуск генератора паролей pass.mjs

node pass.mjs

Алиас для запуска

alias pass1='node pass.mjs'
generatePassword({ hasNumbers: false });
// Пример: MunBedKod
generatePassword({ syllablesCount: 5 });
// Пример: Rot2Ba5Vim1My8Red4
generatePassword({ titlecased: false });
// Пример: si5co3ve8
generatePassword({
  syllablesCount: 4,
  minSyllableLength: 3,
  maxSyllableLength: 4,
  hasNumbers: false,
  titlecased: true,
  separators: "-_",
  vowels: "аеиоуэюя",
  consonants: "бвгджзклмнпрстчш"
});
// Пример: Зер_Коти-Лов_Меч

Длинные пароли, удобные для запоминания:

generatePassword({
  minSyllableLength: 4,
  maxSyllableLength: 6,
  hasNumbers: false,
  titlecased: false,
  separators: " "
});
// Пример: goferu lipeba cyzex
Параметр Описание Значение по умолчанию
syllablesCount Количество слогов 3
minSyllableLength Минимальная длина слога 2
maxSyllableLength Максимальная длина слога 3
hasNumbers Добавлять цифры в пароль true
titlecased Использовать заглавные буквы true
vowels Набор гласных 'aeiouy'
consonants Набор согласных 'bcdfghklmnprstvz'
separators Разделители между слогами