jueves, octubre 28, 2010

Copiar Archivos desde Windows/Linux a Linux con SSH o SFTP - Varias Opciones

Tomado de:
Crear un Script para copiar automaticamente

Automatizar la conexión a sFTP

En este artículo os voy a contar cómo descargar ficheros mediante sFTP (FTP encriptado) de manera automatizada; es decir, sin tener que andar ejecutando el comando ni tener que meter la clave a mano cada vez.
El script es bien sencillito:
#!/bin/bash 
# Aquí ponemos los datos de conexión
USUARIO=usuario
CLAVE=clave
HOST=miftp.com
PUERTO=22  

lftp -p${PUERTO} -u ${USUARIO},${CLAVE} sftp://${HOST} << CMD
get copia_seguridad.bz2 copia_seguridad.bz2
bye
CMD
 
Basta con que sustituyas estos datos por los de tu servidor:
USUARIO=usuario
CLAVE=clave
HOST=miftp.com
PUERTO=22
El puerto se puede dejar el de ssh por defecto, pero en varios servidores me he encontrado que usan uno distinto así que la opción para especificar el puerto es muy útil para mí.
lftp (sophisticated file transfer program) es el que se va a encargar de identificarse en el servidor mediante sftp. Todo lo que escribamos entre <
Me he pasado un buen rato hasta que he conseguido ponerlo en marcha así que lo dejo aquí por si a alguien le puede servir de ayuda.

Damos permisos de ejecucion:
chmod +x copiador.sh

Luego ejecutamos ./copiador.sh

Tambien podriamos crear una entrada en crontab


Aquí podéis ver otra forma de hacerlo

Conectar por ssh sin password


Vamos a explicar rápidamente como conectarte por ssh sin contraseña. Sera necesario copiar tu clave (la publica) al servidor, de tal forma que no sea necesario el logearte cada vez que te conectes.
Generamos la key:
ssh-keygen
Nos generara esto:
/home/myname/.ssh/id_rsa.pub
Ahora copiamos:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario_remoto@192.168.1.4
Te pedirá una vez la password del usuario_remoto y no tendrás que volver a meterla. Me parece mas seguro que escribir los datos en un script sobre todo la password ;p
Ahora con realizar esto es suficiente:
ssh usuario_remoto@192.168.1.4


Pagina Oficial del utilitario solo para Windows:


Utilitarios para acceso a Linux via SSH, que permite copiar desde Windows a computadoras con Linux.
Regularmente utilizo scripts escritos en Linux para la realizacion automatica de mis backups. Pero en esta oportunidad debo de mover los backups de MSSQL desde una pc con Windows XP hacia mi servidor de backups. Para esta tarea me recomendaron utilizar el programada PSCP, el cual es desarrollado por los mismos de mi cliente favorito de ssh para windows: putty.


Pagina Oficial del Putty

Descargar binario de PSCP

Para descargar el instalador de PSCP asi como el de putty pueden hacerlo en la pagina oficial. Para la instalacion tan solo se necesita moverlo a X carpeta.

Uso y parametros de pscp

Ya con nuestro ejecutable pscp descargado en nuestro sistema Windows, lo ejecutamos abriendo el command prompt y tecleando:
C:\Documents and Settings\Administrador\pscp
PuTTY Secure Copy client
Release 0.60
Usage: pscp [options] [user@]host:source target
       pscp [options] source [source...] [user@]host:target
       pscp [options] -ls [user@]host:filespec
Options:
  -V        print version information and exit
  -pgpfp    print PGP key fingerprints and exit
  -p        preserve file attributes
  -q        quiet, don't show statistics
  -r        copy directories recursively
  -v        show verbose messages
  -load sessname  Load settings from saved session
  -P port   connect to specified port
  -l user   connect with specified username
  -pw passw login with specified password
  -1 -2     force use of particular SSH protocol version
  -4 -6     force use of IPv4 or IPv6
  -C        enable compression
  -i key    private key file for authentication
  -noagent  disable use of Pageant
  -agent    enable use of Pageant
  -batch    disable all interactive prompts
  -unsafe   allow server-side wildcards (DANGEROUS)
  -sftp     force use of SFTP protocol
  -scp      force use of SCP protocol
Como podran ver, al teclear el comando sin ningun parametro este nos mostrara la ayuda. Entonces siguiendo las instrucciones anteriores podemos hacer nuestra copia de seguridad remota utilizando el canal encriptado de ssh que nos brinda pscp. Como ejemplo, para mi solucion utilizo
temp>pscp -r -pw contraseña C:\backups usuario@miservidor:/home/backups/
 
Donde,
  • -r , copiar los directorios recursivamente
  • -pw, password
  • C:\backups, directorios a transmitir
  • usuario, nombre del usuario en ele servidor remoto
  • miservidor, ip o nombre del servidor con el camino a donde copiar la información.
Traer archivos 
temporal>pscp -r -pw contraseña usuario@miservidor:*.doc c:\datos 

Programar el backup automaticamente en Windows XP

Para poder crear la tarea automatiza para la transferenicia segura de los archivos de la copia de seguridad, seguimos los siguientes pasos:
  1. Luego nos vamos a Inicio –> Todos los Programas –> Accesorios  –> Herramientas –> Tareas Programadas.
  2. Hacemos clic en Agregar Tarea Programada
  3. Luego clic en Examinar donde buscamos el ejecutable pscp.exe
  4. Lean y sigan los pasos del wizard.
  5. Antes de terminar la creacino de la tarea chequeamos la casilla de abrir propiedades avanzadas.
  6. En la nueva ventana, dentro de la casilla de ejecutar agregamos los parametros propios de nuestra configuracion al comando pscp.

Comentarios finales

En la casilla de ejecutar, hay que dejar los parametros fuera de las comillas dobles. Estas comillas solo deben de contener el path del comando.
Ya que no utilizo Windows Vista ni tengo acceso a Windows 7 no he puesto como programarle backup, pero ha de ser muy similar.

COMANDOS BASICOS DE SSH.

Comandos básicos de ssh

Tomado de:  

Copiar Datos

SSH es un programa que permite acceder a otro ordenador a través de la red, ejecutar comandos en la máquina remota y mover ficheros entre dos máquinas. Provee autenticación y comunicaciones seguras sobre canales inseguros. Es un reemplazo de rlogin, rsh y rcp.
Vamos a ver estos usos básicos del SSH.

ssh

El comando ssh ofrece comunicación encriptada y segura entre dos sistemas sobre una red no segura. Este comando reemplaza al telnet, rlogin, rsh.
Para iniciar una sesión en otra máquina usando ssh:
[usuario1@localhost usuario1]$ ssh usuario1@servidor.dominio.es
The authenticity of host 'servidor.dominio.es (192.168.0.2)' can't be established.
RSA key fingerprint is 97:4f:66:f5:96:ba:6d:b2:ef:65:35:45:18:0d:cc:29.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'servidor.dominio.es' (RSA) to the list of known hosts.
usuario1@servidor.dominio.es's password:
[usuario1@servidor.dominio.es usuario1]$
    
NotaLa primera vez que realizas la conexión debes aceptar la firma del otro host. De esta manera se establece una relación de confianza que se traduce en archivar la clave pública de este servidor en el fichero $HOME/.ssh/known_hosts.
La sintaxis básica del comando ssh es:
ssh user@hostname [command]
    
El comando es opcional. Si se especifica en lugar de obtener un shell se ejecuta el comando en la máquina remota. Por ejemplo podríamos hacer un ls en la máquina remota y observar su salida:
ssh usuario1@servidor.dominio.es ls
    
O realizar alguna operación mas elaborada como realizar una copia en local de un directorio remoto, como en el ejemplo:
ssh usuario1@servidor.dominio.es "tar cf - /home/usuario1" |\
                                  tar xvf -
    
Una de las funcionalidades que le da mayor potencia al ssh es la redirección de las X. Si observas la variable de entorno DISPLAY observarás que tiene la forma localhost:n.n, esta permite que al abrir cualquier aplicación gráfica su salida se redirija al display del cliente.
[usuario1@localhost usuario1]$ ssh usuario1@servidor.dominio.es
[usuario1@servidor usuario1]$ echo $DISPLAY
localhost:11.0
[usuario1@servidor usuario1]$ xeyes&
[usuario1@servidor usuario1]$
    

scp

El comando scp permite copiar ficheros entre dos máquinas. Utiliza ssh para la transmisión de la información, por lo que ofrece la misma seguridad que el ssh. De la misma manera utiliza los métodos de autenticación de ssh. Este comando reemplaza al rcp, ftp.
Este es un ejemplo de uso del scp para copiar desde la máquina local a una remota:
[usuario1@localhost]scp /tmp/file usuario1@servidor.dominio.es:/tmp
    
También podemos copiar ficheros entre dos máquinas remotas:
[usuario1@localhost]scp usuario1@anotherhost:/tmp/file \
                        usuario1@servidor.dominio.es:/tmp
    
La sintaxis del comando es:
scp [-pqrvBC46] [-F ssh_config] [-S program] [-P port] [-c cipher]
         [-i identity_file] [-o ssh_option] [[user@]host1:]file1 [...]
         [[user@]host2:]file2
    
Puedes consultar las opciones en la página man de scp, estas son las más habituales:
  • -p: conserva las propiedades del archivo. Permisos del archivo, fecha de última de modificación.
  • -r: copia recursiva de directorios
La sintaxis para especificar el origen o destino de los archivos tiene la forma [[user@]host:]file donde:
  • user: es el usuario de la máquina. Si no se especifica es el actual.
  • host: es la máquina origen o destino del archivo. Si no se informa es la máquina local.
  • file: fichero o directorio a copiar. Por defecto es el directorio HOME del usuario. En caso de ser un directorio deberás especificar la opción -r.

    Ejemplos tomado de:
    Ejemplos de SCP

    Utilizando SSH


    SCP para copiar archivos

    Una de las herramientas de las que dispone OpenSSH para transmitir archivos entre dos equipos remotos es scp, su nombre proviene de "Secure CoPy". Su manejo es bastante sencillo, básicamente hay que especificarle una lista de archivos origen y al final el archivo o ruta destino, de la siguiente manera:
    scp [[usuario@]máquina:]ruta ... [[usuario@]máquina:]ruta
    Como se puede apreciar, el formato en el que se indican los archivos a copiar es: usuario@máquina:ruta, el primer parámetro (usuario) indica el nombre de la cuenta de usuario que se quiere usar en el sistema remoto, en el caso de no espeficicarlo, se asumirá el usuario que se está empleando en el sistema local. El parámetro máquina es el nombre o la IP del equipo remoto, en caso de que sea el equipo que estamos usando omitimos este campo. Finalmete el parámetro ruta no es más que la ruta hacia el archivo que queremos copiar. A modo de ejemplo, imaginemos que queremos bajarnos el archivo a.tar.gz que esta en el directorio del usuario manolo en el equipo remoto.ejemplo.com, podríamos invocar al scp de la siguiente manera:
    [hell@local] $ scp manolo@remoto.ejemplo.com:a.tar.gz .
    manolo@remoto.ejemplo.com's password:
    a.tar.gz                100%    5008KB   1.6MB/s   00:03
    [hell@local] $
    Ahora imaginemos que queremos subir ese mismo archivo que nos hemos bajado a la carpeta personal del usuario hell en el equipo remoto.ejemplo.com, serviría algo como:
    [hell@local] $ scp a.tar.gz remoto.ejemplo.com:
    hell@remoto.ejemplo.com's password:
    a.tar.gz                100%    5008KB   1.6MB/s   00:03
    [hell@local] $
    Con scp tambíen podemos copiar archivos de varias máquinas remotas, por ejemplo, si quisiéramos bajarnos el archivo a.tar.gz del equipo remoto.ejemplo.com y el archivo b.tar.gz del equipo remoto2.ejemplo.com, asumiendo que la cuenta de usuario a usar en ambos equipos es la que estamos empleando en el equipo local, nos bastaría con:
    [hell@local] $ scp remoto.ejemplo.com:a.tar.gz remoto2.ejemplo.com:b.tar.gz .
    hell@remoto.ejemplo.com's password:
    a.tar.gz                100%    5008KB   1.6MB/s   00:03
    hell@remoto2.ejemplo.com's password:
    b.tar.gz                100%    5203KB   1.6MB/s   00:04
    [hell@local] $

    :

sftp

El comando sftp transfiere archivos entre máquinas de forma interactiva.
Los comandos interactivos son similares al clásico ftp:
[usuario1@localhost usuario1]$ sftp servidor.dominio.es
Connecting to servidor.dominio.es...
usuario1@servidor's password:
sftp> help
Available commands:
cd path                       Change remote directory to 'path'
lcd path                      Change local directory to 'path'
chgrp grp path                Change group of file 'path' to 'grp'
chmod mode path               Change permissions of file 'path' to 'mode'
chown own path                Change owner of file 'path' to 'own'
help                          Display this help text
get remote-path [local-path]  Download file
lls [ls-options [path]]       Display local directory listing
ln oldpath newpath            Symlink remote file
lmkdir path                   Create local directory
lpwd                          Print local working directory
ls [path]                     Display remote directory listing
lumask umask                  Set local umask to 'umask'
mkdir path                    Create remote directory
put local-path [remote-path]  Upload file
pwd                           Display remote working directory
exit                          Quit sftp
quit                          Quit sftp
rename oldpath newpath        Rename remote file
rmdir path                    Remove remote directory
rm path                       Delete remote file
symlink oldpath newpath       Symlink remote file
version                       Show SFTP version
!command                      Execute 'command' in local shell
!                             Escape to local shell
?                             Synonym for help
sftp>
      
Un ejemplo de uso:
[usuario1@localhost]sftp usuario1@servidor.dominio.es
sftp> get fichero
      

No hay comentarios: