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

Нет.

  • Если вы добавите файл после того, как tar просканировал каталог, файл не будет добавлен.
  • Если файл был добавлен в архив, но вы удалили его на диске, он не будет удален из архива.
  • Это применимо также, если вы изменяете содержание.

Unix (не tar) сделает одну вещь:

  • Если файл открыт (для редактирования), когда tar собирает его, вы не будете знать, какая версия файла будет использоваться tar (либо версия в памяти, либо на диске или их смесь).

Помните, что вы можете использовать tar для чтения или записи в канал (на самом деле t в tar означает ленту, то есть когда мир был молод), поэтому tar

  • будет писать за один проход
  • не будет перематывать вывод

Вышесказанное верно для базового tar -c .

  • tar -u добавит новый файл.
  • При преобразовании в файл для синхронизации tar-файла и каталогов может использоваться комбинация команд оболочки tar --diff и tar --delete .
1
24.01.2017, 17:16
4 ответа

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

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

curl -s -c cookiejar.txt -b cookiejar.txt -L -d (скрытый) -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 минут. Я сделал несколько дополнительных строк относительно полной функции, но именно здесь я все исправил. Было много проб и ошибок. Еще раз большое спасибо Калебу , который помог мне со всем этим.

2
27.01.2020, 23:19

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

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

tee logFile < /dev/stdin | bash

Вы можете закрыть его, нажав CTRL - D .

1
27.01.2020, 23:19

Позвольте компьютеру записывать команды и писать за вас начало сценария. Это тривиально с 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

Требуется взаимодействие с созданием после автоматизации? Это то, для чего interact . Подскажет пароль? Нетрудно автоматизировать с помощью , кроме .

1
27.01.2020, 23:19

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

#/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 должен иметь возможность войти в систему как пользователь без пароля, поэтому вам нужно установить пользователя с ограниченным доступом только к журналам, а затем добавить открытый/закрытый ключ par, чтобы он мог аутентифицироваться.

1
27.01.2020, 23:19

Теги

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