Я хотел бы автоматизировать получение диагностических файлов от контроллера, который отвечает на команды ssh, например,
ssh diag@controller tarred > diags.tgz
К сожалению, мне нужно ввести пароль, чтобы выполнить указанную выше команду.Что я обдумал, чтобы обойти это:
- с использованием ключей ssh: невозможно, так как я не могу войти в контроллер, он просто ожидает команды и не предлагает оболочку
- с использованием пакета ssh-pass: у меня нет прав администратора на машине, и я не могу устанавливать пакеты
- с использованием «ожидаемо»: работает до некоторой степени, но полученный файл поврежден.
Вот сценарий «ожидаем», который я использовал:
#!/usr/bin/expect -f
log_user 0
set timeout 300
spawn ssh diag@controller tarred
expect "?assword:"
send "unrealpassword\r"
expect \r\n
log_user 1
expect eof
Этот сценарий гарантирует, что только требуемый вывод будет сохранен с командами «log_user» до тех пор, пока не встретится eof.
Я передал этот скрипт в файл, и этот файл поврежден, то есть он слишком короткий (из-за тайм-аута?) Или слишком длинный (?).Любая идея о том, что здесь идет не так .?