
Eu gostaria de criar um script de shell que fará login em um servidor, obterá o uso do disco do servidor, enviará um e-mail para mim e sairá do servidor. Além disso, se possível, faça isso diariamente. Isto é o que eu tenho:
#!/usr/bin/bash
ssh -p 1111 [email protected]
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at: $CURRENT%
EOF
fi
o nome do shell script é example.sh Quando eu o executo, ele fica me pedindo senha e, quando estou logado, nada acontece.
Responder1
Primeiro, gere uma chave pública para fazer login no sistema remoto sem senha:
ssh-keygen -t rsa -b 4096 -C "your_username"
Isso irá gerar uma chave RSA de 4096 bits em seu ~/.ssh/
diretório com seu nome de usuário como rótulo. Em seguida, adicione esta nova chave ao seu agente ssh para que ela seja usada quando você se conectar via SSH.
ssh-agent -s
ssh-add ~/.ssh/id_rsa
Se você definir um nome personalizado durante a geração da chave, substitua id_rsa
por esse nome.
Agora, copie o conteúdo da sua chave pública para a área de transferência.
clip < ~/.ssh/id_rsa.pub
Em seguida, faça login no servidor remoto e edite o arquivo do usuário remoto .ssh -p YOURPORT [email protected]
authorized_keys
vim .ssh/autorized_keys
Cole o conteúdo que você acabou de copiar na área de transferência. Isso permite conexões do seu computador ao host remoto sem senha, em vez de usar certificados (geralmente muito mais seguros, de qualquer maneira).
Agora, você precisa criar um script, example-script.sh
no diretório inicial do seu host remoto (depois certifique-se chmod a+x example-script.sh
de defini-lo como executável).
#!/usr/bin/env bash
CURRENT=$(df / | awk '/\// { print $5}' | sed 's/%//g')
mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at: $CURRENT%
EOF
E agora, crie um script em seu diretório inicial local, local-script.sh
para executar o comando mais tarde com facilidade (novamente, certifique-se de torná-lo executável depois).
#!/usr/bin/env bash
ssh -P YOURPORT [email protected] ./example-script.sh
Este script permite que você execute ./local-script.sh
a partir de seu diretório inicial para executar seu script remoto em apenas uma linha. Você pode então adicionar isso como um alias ao seu .bashrc
arquivo para que possa simplesmente executar local-script
ou qualquer outro alias que desejar. Você também pode usar o caminho absoluto ( /home/your_username/local-script.sh
) crontab
para executá-lo em um horário específico todos os dias.
Responder2
Em primeiro lugar, para explicar porque nada acontece, provavelmente por causa da sintaxe. Seu comando ssh tem o formato: ssh server
, que é quando você deseja apenas fazer login e digitar manualmente alguns comandos de forma interativa. Mas se você quiser que algum comando seja executado automaticamente após o login, você deve fazer : ssh server somecommand
, então apenas ter somecommand
na próxima linha não funcionará.
Bem, se você deseja que um sistema envie por e-mail informações de espaço em disco sempre que desejar e, ao mesmo tempo, suporte a e-mails programados, eu recomendaria um sistema de três partes:
- um script no servidor que obtém as informações do disco e a lógica do email, por exemplo em
/home/yourusername/script.sh
- crontab para executar o script.sh
- para suas solicitações arbitrárias e espontâneas, você pode fazer ssh e executar o script
script.sh
Este é o script que você coloca no servidor, por exemplo em /home/seunomedeusuario/script.sh.
#!/bin/bash
s="Disk Space Alert: $(df / | grep / | awk '{ print $5}')"
mail -s $s [email protected]
# Feedback
echo $s
Eu removi sed
porque ele simplesmente removeu %
o sinal, mas você o adicionou novamente mais tarde, isso parece um uso redundante do sed, então eu o removi.
Em segundo lugar, condensei as informações de uso do disco para caber apenas na linha de assunto. Se isso não funcionar, é claro que você pode revisá-las para seu formato original, mas informe a todos de qualquer maneira para que possamos saber se houve algum erro etc.
crontab
Edite o crontab no seu servidor, por exemplo, ssh no seu servidor e prossiga com estes comandos
$ crontab -e
Você sabe que o formato é
# m h dom mon dow command
então, diariamente, todos os dias, às 8h
0 8 * * * /home/yourusername/script.sh
Contanto que você já tenha testado o script e saiba que ele funciona para enviar e-mails, o crontab executará o script e fará com que o e-mail seja enviado às 8h todos os dias
solicitação arbitrária para receber informações do disco por e-mail
Você apenas ssh, mas coloca o comando de script no final
ssh -p 1111 [email protected] /home/yourusername/script.sh
Isso usa sintaxe ssh ssh server somecommand
para fazer login, executar qualquer comando e retornar resultados para o padrão local.
Por ter a linha de feedback, não apenas deve ser enviado por e-mail, mas você também verá a Disk Space Alert: ...
mensagem para que pelo menos obtenha feedback imediato de que seu script foi executado ou não.