Рекомендация читать пароль, содержащий специальные символы, такие как $!@ `', в скрипт Bash

Другой метод :печатать все, кроме последней строки файла, печатать новый текст, а затем печатать последнюю строку файла. Затем перенаправьте весь этот вывод в новый файл.

{
    sed '$d' limits.conf
    cat <<EOF
*    soft     nproc       65535
*    hard     nproc       65535
*    soft     nofile      65535
*    hard     nofile      65535
root soft     nproc       65535
root hard     nproc       65535
root soft     nofile      65535
root hard     nofile      65535
EOF
    tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
1
16.07.2020, 00:33
2 ответа
$ echo "$pw"
$!@`',

$ echo "${pw@Q}"
'$!@`'\'','

Это должно сработать. Однако я не знаю, в какой версии bashэто было введено. Это тоже работает и, возможно, было доступно ранее :

.
$ printf %q "$pw"
\$\!@\`\'\,
# or, avoiding the command substitution
$ printf -v pw_ql1 %q "$pw"
$ echo "$pw_ql1"
1
18.03.2021, 23:19

Несколько возможных решений.

  • Пусть pihole будет запрашивать пароль напрямую, а не с помощью собственной подсказки.

    ssh -t user@host pihole -a -p
    
  • Запустите собственную подсказку readна целевой стороне:

    ssh -t user@host 'read -rsp "Password: " newpass && pihole -a -p "$newpass"'
    
  • Пропустить через трубу:

    echo "$newpass" | ssh user@host 'read -r newpass && pihole -a -p "$newpass"'
    
  • Укажите пароль, который вы прочитали, прежде чем передать его:

    read -rsp "Password: " newpass
    qnewpass=$(printf "%q" "$newpass")
    ssh user@host pihole -a -p "$qnewpass"
    
  • Закодируйте пароль и расшифруйте его на другой стороне:

    newpass_base64=$(printf "%s" "$newpass" | base64)
    ssh user@host "pihole -a -p \$(echo $newpass_base64 | base64 -d)"
    
  • Вообще не используйте специальные символы, стиль XKCD . ;-)

3
18.03.2021, 23:19

Теги

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