Crie um script de shell para fazer logon em um servidor e usar o disco por e-mail

Crie um script de shell para fazer logon em um servidor e usar o disco por e-mail

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_rsapor 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.shno diretório inicial do seu host remoto (depois certifique-se chmod a+x example-script.shde 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.shpara 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.sha 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 .bashrcarquivo para que possa simplesmente executar local-scriptou qualquer outro alias que desejar. Você também pode usar o caminho absoluto ( /home/your_username/local-script.sh) crontabpara 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 somecommandna 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 sedporque 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 somecommandpara 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.

informação relacionada