Todos los métodos para hacer esto no son estándar -, así que tenga cuidado y solo configure las cosas para un solo shell.
En general, existen dos métodos para implementar el comportamiento deseado:
Uso de secuencias de escape
Este método ha sido descrito para bash por el usuario Nick. Depende de las extensiones bash. El estándar solo requiere que PS1
esté sujeto a la expansión de parámetros (, que es la expansión variable de shell )y que el shell debería expandir '!' por el número de comando de historial (tenga en cuenta que el estándar no describe "\!" sino un solo signo de exclamación.
Uso de la sustitución de comandos
Los usuarios de ksh suelen utilizar este método, pero no forma parte del estándar de forma intencionada, ya que supone un riesgo para la seguridad. El estándar no requiere que el shell ignore un entorno PS1
importado y, por lo tanto, este entorno podría contener comandos de ataque de un malhechor.
Es muy probable que las versiones futuras del estándar estandaricen la sustitución de comandos para PS1
, pero luego requerirán que el shell ignore un entorno importado PS1
o que active la sustitución de comandos para el shell y configure el comando después de que se haya activado. encendido para poder trabajar.
С точки зрения безопасного хранения пароля вы можете использовать openssl
для создания хэша MD5 пароля, а затем сравнивать с ним последующие входные данные. Это похоже на то, как /etc/passwd
хранит пароли :
openssl passwd -1 -salt j7bJUIHI YOURSECRETPASSWORD
Команда выдаст вам строку, которую вы можете сохранить в сценарии ожидания. Когда пользователь вводит пароль, который вы бы использовали
openssl passwd -1 -salt j7bJUIHI $INPUT
и сравните с сохраненной строкой. Если они совпадают, то $INPUT был правильным паролем. Строка -salt
может быть любой, но она должна быть исправлена между вызовами openssl
для корректного сравнения.
Если вам нужно восстановить исходный пароль, вы не можете использовать этот метод. Взгляните на эту запись для более общего обсуждения этой темы:Скрытие пароля в сценариях оболочки
Извините, читая это во второй раз, я понимаю, что неправильно понял ваш вопрос. Посмотрите ответ здесь :https://stackoverflow.com/questions/681928/how-can-i-make-an-expect-script-prompt-for-a-password. Это похоже на решение, которое вам нужно.