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

0

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, em seguida, sairá do servidor. Além disso, se possível, faça isso diariamente. Isso é 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 script de shell é example.sh Quando eu o executo, ele fica me pedindo senha e uma vez que eu estou conectado, nada acontece.

    
por m123 16.11.2015 / 05:21

2 respostas

1

Primeiramente, explique por que nada acontece, provavelmente por causa da sintaxe. Seu comando ssh é do formato: ssh server , que é quando você deseja apenas efetuar login e, em seguida, digitar manualmente alguns comandos de forma interativa. Mas se você quiser que algum comando seja executado automaticamente após o login, você deve estar fazendo: ssh server somecommand , portanto, ter apenas somecommand na próxima linha não funcionará.

Bem, se você quiser que um sistema envie informações sobre o espaço em disco sempre que quiser e, ao mesmo tempo, ofereça suporte a emails programados, eu recomendaria um sistema com três partes:

  • um script no servidor que obtém as informações de disco e a lógica de e-mail, por exemplo, em /home/yourusername/script.sh
  • crontab para executar o script.sh
  • por suas solicitações arbitrárias, por capricho, você pode ssh e executar o script

script.sh

Este é o script que você coloca no servidor, por exemplo, em /home/yourusername/script.sh.

#!/bin/bash

s="Disk Space Alert: $(df / | grep / | awk '{ print $5}')"

mail -s $s [email protected]

# Feedback
echo $s

Eu removi o sed porque ele simplesmente removeu o sinal % , mas você o adicionou mais tarde, isso parece um uso redundante do sed, então eu o removi.

Em segundo lugar, eu tenho condensado as informações de uso do disco para caber apenas na linha de assunto, se isso não funcionar, então é claro que você pode revisá-lo ao seu formulário original, mas que todos saibam de qualquer maneira para que possamos saber se foram quaisquer erros etc

crontab

Edite crontab no seu servidor, por exemplo, ssh no seu servidor e então continue com estes comandos

$ crontab -e

Você sabe que o formato é

# m h dom mon dow  command

para diariamente todos os dias às 8h

0 8 * * * /home/yourusername/script.sh

Portanto, 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 obter informações de disco enviadas por e-mail

Você acabou de ssh mas colocou o comando de script no final

ssh -p 1111 [email protected] /home/yourusername/script.sh

Isso usa a sintaxe ssh ssh server somecommand para que efetue login, execute qualquer comando e retorne resultados para a saída padrão local.

Como ele tem a linha de feedback, não apenas deve ser enviado por e-mail, mas você também verá a mensagem Disk Space Alert: ... para que, pelo menos, receba um feedback imediato de que seu script foi executado ou não.

    
por clarity123 16.11.2015 / 06:33
3

Primeiro, gere uma chave pública para usar para efetuar login no sistema remoto sem uma senha:

ssh-keygen -t rsa -b 4096 -C "your_username"

Isso gerará uma chave RSA de 4096 bits no diretório ~/.ssh/ com seu nome de usuário como o rótulo. Em seguida, adicione essa nova chave ao seu agente ssh para que 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 de chaves, substitua id_rsa por esse nome.

Agora, copie o conteúdo da sua chave pública para sua área de transferência.

clip < ~/.ssh/id_rsa.pub

Em seguida, faça o login no servidor remoto com ssh -p YOURPORT [email protected] e edite o arquivo authorized_keys do usuário remoto.

vim .ssh/autorized_keys

Cole o conteúdo que você acabou de copiar na sua área de transferência. Isso permite conexões do seu computador para o host remoto sem senha, usando certificados (geralmente muito mais seguros, de qualquer forma).

Agora, você precisa criar um script, example-script.sh , no diretório pessoal do host remoto (certifique-se de chmod a+x example-script.sh para 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 home local, local-script.sh para executar o comando mais tarde facilmente (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 de seu diretório pessoal para executar seu script remoto em apenas uma linha. Você pode adicionar isso como um alias ao seu arquivo .bashrc para que você possa executar apenas local-script ou qualquer outro alias que você queira. Você também pode usar o caminho absoluto ( /home/your_username/local-script.sh ) em crontab para executá-lo em um horário específico todos os dias.

    
por user323419 16.11.2015 / 06:29