Archivo de diciembre 2011
This month:
* Command and Conquer.
* How-To : Make 11.10 Look ‘Classic’, LibreOffice – Part 10, Backup Strategy – Part 4, Persistent USB Stick, and Connect To IRC.
* Linux Lab – Xbox Media Centre.
* Review – Puppy Linux.
* I Think – Would you attend a monthly FCM meeting on IRC?
* Closing Windows – Moving, copying & deleting files
plus: more Ubuntu Games, My Desktop (and an extra!), My Opinion, My Story, and much much more!
Descarga | Full Circle
Todo lo bonito que me ha pasado en la vida, lo he acabado estropeando o en otro caso se ha roto sin que yo tuviera la culpa. Debe ser, mi maldición…
(365 Dias de Soledad)
Ya podemos instalar Ubuntu Tweak 0.6.0, la genial herramienta para configurar muchos aspectos de nuestro sistema.
sudo add-apt-repository ppa:ubuntu-tweak-testing/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak
Enlace | Descarga
Via | Tierra de Cinefagos
Automatizando las conexiones ssh y scp con PLINK y PSCP (Windows y Unix)
Published diciembre 20, 2011 Linux , Programacion , Ubuntu 8 CommentsMuchas veces nos interesa automatizar la conexion SSH o la descarga (download) o envio (upload) de un fichero/s mediante SCP en un servidor remoto del cual no tenemos acceso directo y por tanto tenemos que indicar un login y contraseña en el momento de ejecutar la conexion.
En Unix tenemos muchas formas de automatizar estos scripts (como p.ej usando expect) pero para simplificar el uso de este proceso y que pueda ser probado tambien por usuarios desde Windows (que me imagino les interesara bastante), hoy voy a hablar de las utilidades PSCP y PLINK incluidas en la pagina de descarga de PUTTY.
Para ello conectate a la pagina de Putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) y descargate los ficheros plink.exe y pscp.exe o en su
defecto el paquete putty.zip (que ya lleva incluidas todas las utilidades).
plink.exe lo emplearemos para automatizar las conexiones ssh (ejecuciones de comandos), y pscp.exe para las conexiones scp (upload y descarga de ficheros).
Para ello copia estos ficheros a alguna ruta del path, o p.ej a C:/Windows/System32 con lo que ya podrás acceder a ellos directamente desde la consola de Windows.
En el caso de que uses Ubuntu, puedes insalar estos mismos comandos (plink y pscp, en este caso) si instalamos el paquete putty-tools:
sudo apt-get install putty-tools
Veamos como podemos usarlos para ejecutar un comando remoto o enviar ficheros pasando directamente el usuario y la password:
Ejemplo de uso de pscp:
pscp.exe -pw jose TUTORIAL.txt jose@127.0.0.1:/export/TUTORIALES/COMPARTIDO
Aqui p.ejemplo estoy subiendo el fichero TUTORIAL.txt (local) a la ruta remota /export/TUTORIALES/COMPARTIDO de la maquina 127.0.0.1 para el usuario jose y password jose.
Como veis la sintaxis es practicamente identica a la de el comando scp. Si ejecutais plink o pscp sin indicar nada, ya os muestra la ayudan en linea.
Ejemplo de uso de plink:
plink.exe -pw jose jose@127.0.0.1 ls -l
En este caso conecto a la maquina remota 127.0.0.1 como usuario jose, password jose y ejecuto el comando «ls -l»
Tambien podemos escribir un script de comandos y ejecutarlo con el parametro -m. Ejemplo:
plink -pw jose -m BACKUP.sh jose@127.0.0.1
Donde BACKUP.sh es el fichero que contiene la lista de todos los comandos que queremos ejecutar en remoto.
He escrito tambien una pequeña libreria en Python de automatización donde empleo estas utilidades para ejecutar conexiones ssh o scp remotas desde scripting.
La libreria vale tanto para Windows como Linux sin tocar nada pues ya detecta el Sistema operativo que se esta utilizando, unicamente requiere que plink.exe y
pscp.exe esten en el path de Windows o plink y pscp instalados en Linux.
La libreria es una idea de algo más grande que estoy creando para hacer muchas más cosas: lectura de parametros desde Excel. Ejecucion de consultas sobre base de datos Oracle/MySQL/Sqlite.
Filtrado de ficheros, evaluacion de resultados, etc…
En este caso dejo los ficheros: DEMO.py y WOLF.py, DEMO contiene un ejemplillo y en las capturas de pantalla podreis ver que se ejecuta correctamente tanto en Windows como en Linux.
Nota: Si usais Windows y necesitais un servidor SSH para vuestras pruebas locales, podeis usar MobaSSH (http://mobassh.mobatek.net/)
WOLF.py
#!/usr/bin/python # -*- coding: utf-8 -*- ''' Wolf: Libreria de Automatizacion Version 1.0 - Creada en Diciembre 2011 @author: lobo Nota: Iremos ampliando poco a poco sus funciones Version 1.0 - Soporte de SCP y SSH mediante las utilidades plink.exe y pscp.exe en Windows o plink y pscp (putty-tools) en Linux ''' from subprocess import call from platform import system import os class Wolf(object): ''' Limpia la pantalla ''' def cls(self):</p> os = system() if os == 'Linux': call('clear', shell = True) elif os == 'Windows': call('cls', shell = True)</p> ''' Crea una variable de entorno ''' def export(self,key,value): if (value==None): value="-" os.environ[key]=value print("export "+key+"="+value)</p> ''' Crea un fichero con el contenido indicado, Expande las variables de entorno. ''' def mensaje(self,contenido,fpath): try: f=open(fpath,"wb") contenido=os.path.expandvars(contenido) contenido=os.path.expandvars(contenido) f.write(contenido) f.close() print(fpath+" generado.") except Exception,err: print("Error: "+str(err))</p> ''' Ejecuta comandos remoto mediante SSH ''' def ssh(self,host,user,password,cmds): PLINK_STRING="plink" so = system() if so == 'Linux': PLINK_STRING="plink" elif so == 'Windows': PLINK_STRING="plink.exe"</p> #cmds=os.path.expandvars(cmds) #cmds=os.path.expandvars(cmds)</p> comando=PLINK_STRING+" "+"-pw "+password+" "+user+"@"+host+" "+cmds print("debug: "+comando) try: os.system(comando) except Exception,err: print("Error: "+str(err))</p> ''' Ejecuta en remoto el contenido del script indicado ''' def sshScript(self,host,user,password,script,fOut=None): PLINK_STRING="plink" so = system() if so == 'Linux': PLINK_STRING="plink" elif so == 'Windows': PLINK_STRING="plink.exe"</p> #cmds=os.path.expandvars(cmds) #cmds=os.path.expandvars(cmds)</p> comando=PLINK_STRING+" "+"-pw "+password+" -m "+script+" "+user+"@"+host+" " print("debug: "+comando) try:</p> stdout = os.popen(comando) OUT=stdout.read() print (OUT) if (fOut!=None): f=open(fOut,"wb") f.write(OUT) f.close()</p> except Exception,err: print("Error: "+str(err))</p> ''' Sube un fichero a remoto ''' def upload(self,host,user,password,localfile,remotefile): PSCP_STRING="pscp" so = system() if so == 'Linux': PSCP_STRING="pscp" elif so == 'Windows': PSCP_STRING="pscp.exe" localfile=os.path.expandvars(localfile) localfile=os.path.expandvars(localfile) remotefile=os.path.expandvars(remotefile) remotefile=os.path.expandvars(remotefile) comando=PSCP_STRING+" "+"-pw "+password+" "+localfile+" "+user+"@"+host+":"+remotefile print("debug: "+comando) try: os.system(comando) except Exception,err: print("Error: "+str(err))</p> ''' Descarga un fichero remoto ''' def download(self,host,user,password,remotefile,localfile): PSCP_STRING="pscp" so = system() if so == 'Linux': PSCP_STRING="pscp" elif so == 'Windows': PSCP_STRING="pscp.exe" localfile=os.path.expandvars(localfile) localfile=os.path.expandvars(localfile) remotefile=os.path.expandvars(remotefile) remotefile=os.path.expandvars(remotefile) comando=PSCP_STRING+" "+"-pw "+password+" "+user+"@"+host+":"+remotefile+" "+localfile print("debug: "+comando) try: os.system(comando) except Exception,err: print("Error: "+str(err))</p> ''' Imprime un texto con expansion de variables ''' def echo(self,string): string=os.path.expandvars(string); string=os.path.expandvars(string); print(string)</p> ''' Constructor ''' def __init__(self): ''' Constructor ''' print("Wolf: Libreria de Automatizacion v1.0")
DEMO.py
#!/usr/bin/python # Importamos la libreria de Automatizacion from Wolf import Wolf # Creamos una instancia de la clase s=Wolf() # Indicamos los datos de Acceso a la maquina remota host="AQUI TU HOST" user="AQUI TU USER" password="AQUI TU PASSWORD" # EJEMPLO_1 : Creamos un script con los comandos a ejecutar. s.mensaje("cd ${HOME}; cal","SCRIPT_01.sh") # EJEMPLO_2: Ejecutamos en remoto el script anterior y guardamos sus trazas en Local (fichero TRAZAS.log) s.sshScript(host,user,password,"SCRIPT_01.sh","TRAZAS.log") s.echo("Mi directorio HOME es ${HOME}") # EJEMPLO_3: Descargamos de remoto un fichero mediante pscp s.download(host, user, password, "/tmp/SSH.log", "./SSH_recuperado.log")
Referencias: http://linux.die.net/man/1/plink | http://linux.die.net/man/1/pscp
Wind of Change
(6 años x 365 dias de soledad, son muchos dias de soledad)
Comentarios recientes