Я хочу найти наиболее безопасный способ сделать это в bash (отключен вход через ssh-ключ на стороне сервера), что означает:
- Я не хочу помещать пароль в любой файлпоэтому он должен храниться в памяти при необходимости
- Я не хочу, чтобы пароль отображался при выполнении ps
- , когда цикл завершен, я хочу удалить пароль.
Я предложил решение сначала получить пароль в интерактивном режиме (команда read
), затем повторно использовать его в цикле с sshpass
, и, наконец, удалить его с помощью PROMPT_COMMAND
.
Цикл завершается, если
- пароль неверен или,
- нажата первая цифра состояния возврата ssh (неверный регистр пароля) (на моей машинеэто 5)
Меня интересует ваше мнение относительно безопасности.
(Примечание: нам нужны эти '&&' в конце строк последнего блока, чтобы избежатьвыполнение PROMPT_COMMAND, как при очистке SSHPASS.)
SSH_WRONG_PW_STATUS=5;
export SSHPASS= ;
PROMPT_COMMAND='SSHPASS=' ;
read -p"Enter password: " -s SSHPASS &&
X= &&
while [ x$SSH_WRONG_PW_STATUS != x$X ] ; do
sshpass -e ssh user@remotehost && read -t 2 -p"Reconnect? (press $SSH_WRONG_PW_STATUS to quit) " -n1 X || X=${?:0:1};
done