Записывайте нажатия клавиш через ssh и сможете воспроизводить их

Сегодня я работаю над небольшим сценарием для нашего минимального сервера, где я могу войти в наше программное обеспечение инвентаря, загрузить csv и поместить его в веб-каталог, используя периодическое задание cron.

Используя скрипт и скрипт, я смог полностью обработать все это, пока не понял, что scriptreplay буквально воспроизводит вывод терминала, а не фактический сайт, который я загружал с помощью w3m в первый раз.

Поэтому я ищу способ записи нажатий клавиш через ssh, чтобы следовать моим первоначальным инструкциям.

У кого-нибудь есть идеи? В противном случае, есть ли у кого-нибудь альтернативы? Это только мини-версия Ubuntu, на которой работает наш сервер, а не GUI.

    Поэтому после многого назад и вперед с Caleb мы наконец придумали решение проблемы. Вход, который я пытался сделать прямо в программном обеспечении для управления запасами, был пугающе, но сегодня, чтобы процитировать наши спины и передовые разговоры, это решило это. Нет необходимости записывать нажатия клавиш на всех. Просто хорошее старое использование noggin.

    Первое подключение в вашем скрипте – войти в систему и создать сеанс в файле cookie:

    curl -s -c cookiejar.txt -b cookiejar.txt -L -d 'username=user@example.com&pass=******' -e 'https://my.channelgrabber.com/login.php' https://my.channelgrabber.com/login.php -o /dev/null

    Затем вы можете запросить другую страницу, но вам нужно передать предыдущую, на которой вы были. Например, после вышесказанного вы можете запустить:

    curl -s -c cookiejar.txt -b cookiejar.txt -L -e 'https://my.channelgrabber.com/index.php' https://my.channelgrabber.com/products.php -o products.html

    Это привело к тому, что мне нужно было идеально. Отсюда я просто удалил файл cookie, как только он был использован, и получил то, что мне нужно:

    rm -rf cookiejar.txt

    … и установите его на задание cron каждые 5 минут. Есть некоторые дополнительные строки, которые я сделал относительно полной функции, но это прямо здесь, что все для меня исправлено. Это было много проб и ошибок. Большое спасибо вам снова Калебу, который помог мне со всем этим.

    Запись команд и их повторное воспроизведение – неправильный способ решения этой проблемы. Вместо этого вы должны написать сценарий, который обрабатывает это задание. Сценарии оболочки в основном представляют собой списки команд, которые вы запускали в командной строке, чтобы они выполнялись. Начните новый черный текстовый файл в своем редакторе, а в первой строке введите оболочку, в которую вы хотите ее запустить. Например, это должно быть хорошим началом:

     #/usr/bin/env bash 

    Теперь сохраните это с помощью некоторого имени, например fetch_and_post_logs.bash . Обратите внимание, что это должно быть место, где cron может его найти, /usr/local/bin/ возможно, будет хорошим выбором.

    Затем установите сценарий в исполняемый файл:

     $ chmod 755 /usr/local/bin/fetch_and_post_logs.bash 

    Теперь давайте плоть, что сценарий немного. Для этой части вам нужно будет предоставить некоторые сведения о себе, но скажем, что вы начинаете с копирования чего-либо с удаленного сервера в локальную папку:

     #/usr/bin/env bash timestamp=$(date +%Y-%m-%d) scp user@remotehost:/path/to/logs.csv /path/to/www/logs-${timestamp}.csv 

    Затем из cron запустите этот скрипт:

     0 0 * * * /usr/local/bin/fetch_and_post_logs.bash 

    Это должно заставить вас начать. Если вам нужна дополнительная помощь, задайте конкретные вопросы о местах, где вы застряли.

    Обратите внимание, что для работы cron необходимо будет войти в систему как пользователь, о котором идет речь, без пароля, поэтому вы хотите настроить пользователя, который имеет ограниченный доступ только к журналам, а затем добавить общий / закрытый ключ, чтобы он может аутентифицироваться.

    Пусть компьютер записывает команды и записывает начало сценария для вас. В частности, это тривиально с TCL .

     $ autoexpect ssh somesystem autoexpect started, file is script.exp Last login: Mon Jan 23 15:14:04 2017 from 84-182-91-4.dyn.example.net somesystem$ pwd /home/jdoe somesystem$ exit logout Connection to 192.0.2.42 closed. autoexpect done, file is script.exp $ cat script.exp ... 

    Или регулярные скрипты, это тоже легко.

     #!/usr/bin/env expect package require Tcl 8.5 set timestamp [clock format [clock seconds] -format "%Y-%m-%d"] exec scp user@host:/in/log.csv /out/log-$timestamp.csv 

    Нужно ли взаимодействовать с spawn после автоматизации? Для этого и требуется interact . Запросы пароля? Нет больших трудностей для автоматизации с expect .

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

    Чтобы отслеживать ввод, вы можете передать его через tee который выводит его в файл, например:

     tee logFile < /dev/stdin | bash 

    Вы можете закрыть его с помощью CTRL- D .