tripwire
— это инструмент безопасности для проверки того, не были ли подделаны файлы в системах. Я не знаю, слишком ли это для ваших нужд, но он может делать то, что вы хотите.
Можно script(1)
как мини -ожидать, при условии, что вы справитесь с настройкой произвольных таймаутов, что конечно довольно халтурно:
{ sleep 1; echo PASSWD; } | script -q /dev/null -c 'ssh user@host CMD'
или с синтаксисом BSDscript(1)
:
{ sleep 1; echo PASSWD; } | script -q /dev/null ssh user@host CMD
sleep
необходим, потому что ssh
будет опустошать входной буфер tty (и отбрасывать все, что уже было записано в него )перед чтением пароля. Если удаленный сервер иногда медленно отвечает, использование «достаточно большого -» тайм-аута может оказаться нецелесообразным.
sshpass
, expect
и т. д. справляются с этим, ожидая ssh
для записи приглашения ... password:
, прежде чем они запишут пароль на главный конец pty. Сделать это из стандартной оболочки не просто и не очень надежно. Вот кладж, использующий именованный канал:
passwdcmd(){
t=$(mktemp -u); mkfifo "$t" || return
script /dev/null -qc "$2" <>"$t" | { dd count=1 2>/dev/null; echo "$1" >"$t"; rm "$t"; cat; }
}
passwdcmd PASSWD 'ssh user@host CMD'
Конечно, это не очень безопасно, тем более, что echo
может не быть встроенной -оболочкой. Для любого не -интерактивного использования ssh используйте аутентификацию с открытым ключом . ].