Альтернатива sshpass в коде linux shell/bash

tripwire — это инструмент безопасности для проверки того, не были ли подделаны файлы в системах. Я не знаю, слишком ли это для ваших нужд, но он может делать то, что вы хотите.

1
30.03.2020, 13:30
1 ответ

Можно 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 используйте аутентификацию с открытым ключом . ].

2
19.03.2021, 02:31

Теги

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