Em alguns momentos da vida de quem administra um servidor Linux, pode ser necessário utilizar o comando Expect. O expect é basicamente um "simulador de interações humanas", ou seja, ele simula o que você digitaria a partir de uma mensagem específica.
Sendo mais claro: Quando você digita um comando como:
ftp ftp.seusite.com
Em seguida aparece algo como:
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 2 of 50 allowed.
220-Local time is now 13:30. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 15 minutes of inactivity.
Name (ftp.seusite.com:usuario):
Nesse momento você precisa digitar seu usuário, e depois uma senha. Como fazer para automatizar essa atividade, caso você queirar executar como uma tarefa agendada no Cron?
É aí que entra o Expect!
Os exemplos abaixo foram testados no Centos Linux 6, mas nada impede que funcione em outras distribuições. Lembre-se que o Expect não é uma forma segura de passar senhas, pois as mesmas terão que ser armazenadas em texto plano. Entenda os scripts abaixo apenas como exemplo.
Primeiro, vamos instalar o expect (caso já não tenha instalado):
yum -y install expect
Depois vamos criar um script como no exemplo abaixo, lembrando de substituir ftp.seusite.com pelo seu servidor de FTP, usuario pelo seu usuário e senha pela sua senha:
#!/usr/bin/expect
spawn ftp ftp.seusite.com
set timeout -1
expect "Name"
send -- "usuario\r"
expect "Password"
send -- "senha\r"
expect "Using binary mode to transfer files."
send -- "ls\r"
expect eof
Executando o exemplo acima (lembre de dar um chmod +x no arquivo!), logamos na conta de FTP e listamos (ls) os arquivos da conta.
Se deu tudo certo, serão exibidos na tela os arquivos da sua conta de FTP. Agora vamos a um exemplo com a utilização de parâmetros.
A utilidade disso é que você pode criar um script genérico para utilizar sem precisar alterar o arquivo ou criar um novo para cada conta que você tenha. Vamos ao exemplo:
#!/usr/bin/expect
set usuario [lrange $argv 0 0]
set senha [lrange $argv 1 1]
spawn ftp ftp.seusite.com
set timeout -1
expect "Name"
send -- "$usuario\r"
expect "Password"
send -- "$senha\r"
expect "Using binary mode to transfer files."
send -- "ls\r"
expect eof
Entre na pasta onde o script está salvo, e chame da seguinte forma:
./nome_do_script usuario senha
Funcionou? Não funcionou? Tem dúvidas? Use os comentários!
Fonte: http://bash.cyberciti.biz/security/expect-ssh-login-script/
Últimos comentários