Receba seu IP externo via e-mail ou ensine o bash a ler e enviar e-mails

Muitas vezes precisamos acessar nossas máquinas remotamente, mas como aqui no Brasil quase todos usam IP dinâmico e muitos eventos podem fazê-lo mudar: perda de sinal do modem, falta de energia, problemas no provedor de acesso... precisamos de algum modo simples que nos envie o IP. A ideia é ensinar o sistema a enviar e ler e-mails.

[ Hits: 24.527 ]

Por: /dev/movebo em 27/09/2010 | Blog: http://devmovebo.blogspot.com


Introdução



Muitas vezes precisamos acessar nossas máquinas remotamente (via SSH principalmente), mas como aqui no Brasil os IPs estáticos são absurdamente caros e os dinâmicos podem facilmente mudar: perda de sinal do modem, falta de energia, problemas no provedor de acesso... precisamos de algum modo simples e transparente de obtê-lo.

É eu sei, existem o NoIP e o DynDNS, mas esta mesma solução pode resolver outros problemas para outros usuários, que não consigo prever. Então, mãos à obra pessoal.

Nossa tarefa será dividida em 3 partes:
  1. Instalar e configurar o msmtp para enviar e-mails pelo gmail;
  2. Criar um script para obter o último IP informado pelo gmail;
  3. Criar um script para ser executado pelo boot e pelo cron.

1. Enviando e-mails: msmtp

O msmtp é um cliente capaz de enviar e-mails para qualquer servidor SMTP, é um bom substituto simplificado para o sendmail.

Sua documentação pode ser lida aqui:
O código-fonte pode ser baixado aqui:
Instalação:

wget http://downloads.sourceforge.net/project/msmtp/msmtp/1.4.21/msmtp-1.4.21.tar.bz2
tar xjvf msmtp-1.4.21.tar.bz2
$ cd msmtp-1.4.21
$ ./configure
$ make
# make install


Se você estiver no Debian ou algum variante rode:

sudo apt-get install `apt-cache search msmtp | awk '{print $1}'`

Para configurar o msmtp eu me baseei neste ótimo artigo do Andrew's Corner.

Como agora o Gmail só permite POP e SMTP via conexão SSL, precisaremos gerar dois certificados PEM (Privacy-enhanced Electronic Mail). Vamos lá!

1.1. Gerando os certificados PEM

O Andrew criou um script em Perl para gerarmos localmente os certificados e só me levou meia hora para configurar todos os módulos que o Perl necessitava. Então, por caridade, pus o código abaixo, é só copiar e colar:

mkdir -pv $HOME/.certs && cat > $HOME/.certs/Equifax_Secure_CA.pem << FIM
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
-----END CERTIFICATE-----
FIM

cat > $HOME/.certs/Thawte_Premium_Server_CA.pem << FIM
-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
UCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----
FIM

Hora de dizer ao openssl que temos os certificados:

c_rehash $HOME/.certs/

OK, tudo pronto para configurar o .msmtprc.

1.2. Configurando o .msmtprc

Bom, criados os certificados, é hora de fazer nosso arquivo de configuração.

Para evitar confusão entre o que é variável, função, comando e dados a serem preenchidos, o arquivo será configurado para o Zé abaixo. Mude para seus próprios dados. Eis, aí o Zé:
  • Endereço no gmail: zeh@gmail.com
  • Senha do gmail: 53nH*
  • USER: zeh
  • HOSTNAME: NAVI

E seu arquivo de configuração:

touch $HOME/.msmtprc && chmod 600 $HOME/.msmtprc && cat > $HOME/.msmtprc << FIM
account default
host smtp.gmail.com
port 587
from zeh@gmail.com
tls on
tls_starttls on
#tls_trust_file /home/zeh/.certs/Thawte_Premium_Server_CA.pem
tls_trust_file /home/zeh/.certs/Equifax_Secure_CA.pem
auth on
user zeh@gmail.com
password 53nH*
logfile ~/.msmtp.log
FIM

Note que o chmod é muito importante, já que não queremos que outros usuários possam ler nossa senha. Vamos testar para ver se deu tudo certo:

echo -e "Subject: Teste 1 Can you read me?" | msmtp zeh@gmail.com

Veja em sua caixa de entrada se o e-mail chegou. Em casa ele leva menos de 5 segundos para enviar o e-mail.

Agora que já podemos enviar os e-mails, vamos ver como lê-los.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Lendo e-mails com o wget
   3. Criando o script de checagem e envio
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Aprendendo a melhorar os seus scripts

Backup automatizado com HD externo

Shell script com PHP

pam_mount e CiD - Gerenciamento centralizado dos mapeamentos de unidades de rede no Ubuntu

GNU Parallel: criando atividades em paralelo com shell script

  
Comentários
[1] Comentário enviado por xerxeslins em 28/09/2010 - 00:29h

Interesante!

[2] Comentário enviado por letifer em 28/09/2010 - 16:51h

Pessoal,

cuidado que o VOL está ignorando as barras de escape (\ ).
Se você não tem certeza se em algum ponto do código deve haver uma barra de escape, no meu blog postei os códigos através do site pastebin.
< http://bit.ly/deB0dO >

Também pus algumas atualizações do código lá, ele ficou 50% mais rápido.

[]s
/dev/movebo

[3] Comentário enviado por letifer em 28/09/2010 - 17:06h

Pegue o código atual diretamente em:
< http://pastebin.com/R7vWtxEm >


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts