OK, acredito que entendi sua pergunta agora.
No host1
Vamos supor que você tenha host1
ao qual você se conecta com ssh
via putty
, nesse host você deve instalar screen
ou tmux
(do gerenciador de pacotes, eles estarão lá). Sugiro screen
, pois é um pouco mais fácil para um iniciante.
Além disso, você precisa fazer o login em host2
de host1
, portanto, é necessário configurar um ssh key
, o que permitirá o login sem uma senha. Para fazer isso, você precisa executar:
ssh-keygen -f ~/.ssh/host1tohost2
Ele pedirá uma senha, para executar o script automaticamente (sem a necessidade de entrada manual de uma frase secreta) você deve configurá-lo para uma frase secreta vazia. Mantenha o host1 seguro! Graças a essa chave, qualquer pessoa no controle de host1
também ganha o controle de host2
(na medida em que as permissões do usuário permitem).
Esse comando gerará os seguintes arquivos:
~/.ssh/host1tohost2
~/.ssh/host1tohost2.pub
Você deve copiar ~/.ssh/host1tohost2.pub
para host2
:
scp ~/.ssh/host1tohost2.pub me@host2:~
No host2
Crie ~/.ssh
no host2 e mova host1tohost2.pub
lá e crie um arquivo chamado authorized_keys
nesse diretório:
mkdir -f ~/.ssh
mv ~/host1tohost2.pub ~/.ssh
cd ~/.ssh
cat host1tohost2.pub >> authorized_keys
Isso permite o login de host1
a host2
sem um prompt de senha interativo.
Próximo,
Vamos supor que o arquivo servers.txt
esteja em /home/me/myservers/servers.txt
on host2
. Essa suposição é necessária, pois usaremos esse path
em um script em host1
.
Voltar para o host1
O script de loop infinito que você precisa é:
#!/bin/sh
X_SECONDS=6
LOGFILE=~/mypings.log
while ((1)); do
# >$LOGFILE # clear log file (see comments)
ssh -i ~/.ssh/host1tohost2 me@host2 'cat /home/me/myservers/servers.txt' |
while read x; do
echo "ping to $x"
ping -c1 $x >> $LOGFILE
done
sleep $X_SECONDS
done
Vamos supor que esse script seja salvo em um arquivo chamado pingservers.sh
. Mas não o execute ainda, já que ele irá parar quando você fechar putty
. Agora screen
entra em cena (você instalou, certo?). Executar:
screen
E aparentemente nada muda. Agora você está em um shell
que está sendo acessado por meio de socket
in /var/run
, esse shell não fechará uma vez se você detach
dele e então fechará putty
(na verdade, se você acabou de putty
o sistema operacional vai descobrir as coisas e não fechar o shell de qualquer maneira, mas vamos fazer um bom detach
por razões educacionais). Antes de separar, é hora de executar:
./pingservers.sh
Ele será executado para sempre e manterá echo
ing algumas mensagens enquanto estiver gravando no arquivo de log.
Para desanexar de screen
você precisa digitar Ctrl+A D
(segure Ctrl , pressione A , libere Ctrl e pressione D ). E você está de volta no shell
original com o qual você fez login com putty
, agora você pode fechar putty
e tomar um café.
Quando você fizer login novamente em host1
, o arquivo ~/mypings.log
será atualizado com mais e mais pings (não é necessário executar screen
novamente). Para verificar o arquivo que está sendo atualizado em tempo real, você pode usar:
tail -f ~/mypings.log
O arch linux wiki tem muito mais informações úteis sobre as chaves ssh-keygen e ssh em geral , e o O mesmo acontece com a tela do gnu . Estes dois artigos são excelentes fontes de informação para ambos os programas.