Grave pressionamentos de tecla no ssh e consiga reproduzi-los

1

Eu tenho trabalhado em um pequeno script hoje para o nosso servidor mínimo aqui onde eu posso entrar em nosso software de inventário, baixar o csv e colocá-lo no diretório da web usando um cron job periodicamente.

Usando script e scriptreplay consegui fazer tudo isso funcionar perfeitamente, até que percebi que scriptreplay estava literalmente repetindo a saída do terminal em oposição ao site real que eu estava carregando usando o w3m pela primeira vez.

Então, estou procurando uma maneira de gravar pressionamentos de tecla via ssh para seguir minhas instruções iniciais.

Alguém tem alguma ideia? Se isso falhar, alguém tem alguma alternativa? É apenas uma mini versão do Ubuntu que o nosso servidor está rodando, portanto não há interface gráfica.

    
por Daniel Ruxton 24.01.2017 / 16:06

4 respostas

2

Então, depois de várias idas e vindas com o Caleb , finalmente encontramos uma solução para o problema. O login que eu estava tentando fazer diretamente para o software de gerenciamento de inventário era complicado, mas para citar de acordo com nossas conversas de volta e para a frente hoje à noite, isso resolveu. Não há necessidade de gravar as teclas digitadas. Apenas o bom e velho uso do noggin.

The first connection in your script is to login and create a session in a cookie:

curl -s -c cookiejar.txt -b cookiejar.txt -L -d '[email protected]&pass=******' -e 'https://my.channelgrabber.com/login.php' https://my.channelgrabber.com/login.php -o /dev/null

Next you can ask for another page, but you have to pass the previous one you were on. For example after the above, you can run:

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

Isso trouxe o que eu precisava perfeitamente. A partir daqui, acabei de excluir o cookie depois que ele foi usado e recuperei o que eu precisava:

rm -rf cookiejar.txt

... e configure-o em um cron job para executar a cada 5 minutos. Há algumas linhas extras que eu fiz sobre a função completa, mas isso aqui é o que consertou tudo para mim. Foi muita tentativa e erro. Um grande obrigado novamente para Caleb que me ajudou com essa coisa toda.

    
por 25.01.2017 / 00:09
1

Gravar comandos e reproduzi-los é a maneira errada de resolver esse problema. Em vez disso, você deve estar escrevendo um script que lide com esse trabalho. Scripts de shell são basicamente apenas listas de comandos como você executaria na linha de comando para que eles sejam executados. Inicie um novo arquivo de texto sem formatação preto em seu editor e, na primeira linha, digite em qual shell você deseja que ele seja executado. Por exemplo, este deve ser um bom começo:

#/usr/bin/env bash

Agora salve isso com algum nome como fetch_and_post_logs.bash . Note que este deve ser um lugar onde cron possa encontrá-lo, /usr/local/bin/ pode ser uma boa escolha.

Em seguida, defina o script como executável:

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

Agora vamos detalhar esse script um pouco. Para esta parte você terá que fornecer algum know how, mas digamos que você comece copiando algo de um servidor remoto para uma pasta local:

#/usr/bin/env bash

timestamp=$(date +%Y-%m-%d)

scp user@remotehost:/path/to/logs.csv /path/to/www/logs-${timestamp}.csv

Em seguida, do cron, execute este script:

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

Isso deve começar. Se você precisar de mais ajuda, por favor, faça perguntas específicas sobre os lugares onde você está preso.

Observação para que isso funcione cron precisará ser capaz de fazer o login como o usuário em questão sem uma senha, portanto, você deverá configurar um usuário que tenha acesso limitado a apenas os registros e, em seguida, adicionar uma conta pública / chave privada par para que possa autenticar.

    
por 24.01.2017 / 16:28
1

Deixe o computador gravar os comandos e escreva o início do script para você. Isso é trivial com o TCL , em particular expect .

$ 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
...

Ou scripts regulares, isso também é fácil.

#!/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

Precisa interagir com spawn após a automação? É para isso que o interact é. Prompts de senha? Nenhuma grande dificuldade para automatizar com expect .

    
por 24.01.2017 / 17:21
0

Concordo com os outros que pode haver maneiras melhores de abordar seu problema, mas vejo alguns benefícios em registrar o que você faz e usá-lo posteriormente para criar um script.

Para rastrear sua entrada, você poderia passá-la por tee , o que resultaria em um arquivo como:

tee logFile < /dev/stdin | bash

Você pode fechá-lo com CTRL - D .

    
por 24.01.2017 / 16:26