Algunos procesos no pueden automatizarse simplemente con bash, porque requieren la interacción con el usuario, por ejemplo un login de ssh.
En mi caso quería automatizar el montaje de comparticiones de Windows 2003, y aunque podía enviar la clave en el comando, esto queda grabado en los registros de sistema… no me gusta que se registre mi clave:
#!/bin/bash # # unidades_red 0.2 - GPL # (c) 2007-05 Guimi # http://guimi.net # # Ult mod: Guimi 2012-03 # # Solicitamos la clave echo -n "Introduzca su clave de red: " # Tomamos nota del estado de stty oldmodes=`stty -g` # Quitamos el echo para que no se muestre la clave stty -echo # Leemos la clave read clave # Volvemos a situar stty como estaba stty $oldmodes # Generamos un salto de linea echo # OJO: LA CLAVE SE REGISTRA sudo mount -t cifs //SERVIDOR/RECURSO /MONTAJE/ -o username=guimi,workgroup=MIRED,iocharset=utf8,file_mode=0777,dir_mode=0777,password=$clave
Una solución pasa por expect.
# aptitude install expect
#!/usr/bin/expect -f # # unidades_red 0.3 - GPL # (c) 2012-03 Guimi # http://guimi.net # # Ult mod: Guimi 2012-03 # # Tomamos el primer parametro como clave #set clave [lrange $argv 0 0] # Solicitamos la clave de red send_user "Introduzca su clave de red: " stty -echo expect_user -re "(.*)\n" {set clave $expect_out(1,string)} stty echo send_user "\n" # Anulamos la salida por terminal log_user 0 # Conectamos las unidades de red spawn sudo mount -t cifs //SERVIDOR/RECURSO /MONTAJE/ -o username=guimi,workgroup=MIRED,iocharset=utf8,file_mode=0777,dir_mode=0777 expect "*assword:"; send "$clave\r" expect eof spawn sudo mount -t cifs //SERVIDOR/RECURSO2 /MONTAJE2/ -o username=guimi,workgroup=MIRED,iocharset=utf8,file_mode=0777,dir_mode=0777 expect "*assword:"; send "$clave\r" expect eof
expect, password