Учитывая токен начального ключа, за которым следуют n токенов, чередуйте n токенов с ключом

Вы можете попробовать printf "% s \ n" 'username: encryptedpassword' | sudo chpasswd -e - который может обойти проверку пароля, выполняемую PAM.

Пароль должен быть предварительно зашифрован, например как в примере mkpasswd от muru. Например:

p=$(mkpasswd -m sha-512 'mysupersekretpassword')
printf "%s:%s\n" 'username' "$p" | sudo chpasswd -e

Я использую здесь printf вместо echo , потому что echo будет интерпретировать и изменять вывод для некоторых последовательностей символов, которые могут встречаются в зашифрованном пароле, например \ t , \ n , \ nnn (трехзначное восьмеричное) и другие.

Не забудьте удалить команду mkpasswd из вашего .bash_history . Или используйте export HISTCONTROL = ignorespace и префикс команды p = $ (...) пробелом, чтобы она никогда не сохранялась в истории. Если вы не используете bash, используйте тот метод, который подходит для вашей оболочки.

0
18.07.2018, 07:21
2 ответа

Для этой цели можно использовать awk

awk '{ for(i = 2; i <= NF; i++) { print $i,$1; } }'  file

Цикл for переходит от второго поля к последнему, и каждое поле печатается с присоединенным первым полем

2
28.01.2020, 02:23

sed идеально подходит для этой задачи. Просто немного подправив ваш код sed, мы имеем:

sed -E '
    s/^([a-z][^ ]*) ([0-9]+)/\2 \1\n\1/
    /\n/P;D
' filename.txt

Выход:

17 key1
89 key1
52 key1
5 key2
189 key2
6 key2
3 key2
5 key2
21 key2

Пояснение:

  • Вы уже знаете команду замены s///, которую я взял у вас, и просто удалите global /g flag.
  • Основная идея заключается в том, что мы смотрим на первые два элемента, переворачиваем их, а также сохраняем копию первого элемента (перед переворотом )и помещаем новую строку \nпосле операции переворота, так что мы можно использовать команду P, которая печатает только до первой новой строки в пространстве шаблонов.
  • Квалифицируйте Pс помощью /\n/, чтобы избежать бесконечного цикла.
  • Команда Dудаляет до первой новой строки в пространстве шаблонов и с тем, что осталось от пространства шаблонов, возвращает управление в начало сценария. IOW, то, что вы сделали, предоставило неявный механизм цикла.
  • Зацикливание заканчивается для текущей строки, когда пространство шаблона окончательно съедено этим непрерывным процессом s/// --- P --- D --- s/// --- P --- D............
  • После этого sedначинается новый цикл чтения и дальше вы уже знаете что происходит....ХТХ.
1
28.01.2020, 02:23

Теги

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