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/