Bash
Tutorial Bash: Transferencia de archivos y comunicación remota con SSH
En este tutorial de Bash Shell, descubre cómo usar scp, rsync y ssh para transferir archivos y gestionar conexiones seguras con servidores remotos.
Aprende Bash GRATIS y certifícateEl comando scp
El comando scp
(secure copy protocol) es una herramienta esencial dentro de los comandos Linux para la transferencia segura de archivos entre hosts en una red. scp
utiliza el protocolo SSH para garantizar que los datos se transfieran de manera segura, lo que lo convierte en una opción confiable para la comunicación remota en entornos donde la seguridad es una prioridad.
El uso básico de scp
implica la especificación de un archivo fuente y un destino. La sintaxis general es:
scp [opciones] fuente destino
Un ejemplo simple para copiar un archivo local a un servidor remoto sería:
scp archivo.txt usuario@servidor:/ruta/destino/
Aquí, archivo.txt
es el archivo que se desea transferir, usuario
es el nombre de usuario en el servidor remoto, servidor
es la dirección del servidor, y /ruta/destino/
es la ruta en el servidor donde se almacenará el archivo.
Para copiar un archivo desde un servidor remoto a la máquina local, la sintaxis se invierte:
scp usuario@servidor:/ruta/origen/archivo.txt /ruta/local/
scp
también permite copiar directorios completos. Esto se logra utilizando la opción -r
para copiar de manera recursiva:
scp -r directorio/ usuario@servidor:/ruta/destino/
Es posible especificar un puerto SSH diferente al predeterminado (22) utilizando la opción -P
:
scp -P 2222 archivo.txt usuario@servidor:/ruta/destino/
La opción -C
permite comprimir los datos durante la transferencia, lo que puede ser útil para mejorar la velocidad en conexiones lentas:
scp -C archivo.txt usuario@servidor:/ruta/destino/
Para evitar la necesidad de ingresar la contraseña cada vez que se utiliza scp
, es común configurar la autenticación mediante claves SSH. Esto se logra generando un par de claves SSH con ssh-keygen
y añadiendo la clave pública al archivo ~/.ssh/authorized_keys
del usuario remoto.
scp
es una herramienta robusta para la transferencia de archivos en entornos donde la seguridad es crucial. Aunque scp
es ampliamente utilizado, es importante notar que rsync
puede ser preferible en situaciones donde la eficiencia y la capacidad de reanudar transferencias interrumpidas son críticas. Sin embargo, scp
sigue siendo una opción rápida y sencilla para muchas tareas de transferencia de archivos en Bash script y Shell.
Uso de **sftp**
El comando sftp
(SSH File Transfer Protocol) es una herramienta segura para la transferencia de archivos entre hosts en una red. sftp
utiliza el protocolo SSH para garantizar que los datos se transfieran de manera segura, proporcionando una interfaz similar a FTP pero con conexiones cifradas. Se recomienda su uso sobre el comando scp
debido a su mayor seguridad.
Uso básico de sftp:
sftp usuario@servidor
Una vez conectado, puedes utilizar comandos interactivos como:
- Listar archivos en el servidor remoto:
sftp> ls
- Subir un archivo al servidor remoto:
sftp> put archivo_local.txt /ruta/remota/
- Descargar un archivo desde el servidor remoto:
sftp> get /ruta/remota/archivo_remoto.txt /ruta/local/
- Salir de la sesión
**sftp**
:
sftp> exit
Transferencia no interactiva:
Para transferencias directas sin entrar en modo interactivo, puedes usar sftp
en modo no interactivo:
- Subir un archivo:
sftp usuario@servidor:/ruta/remota/ <<< $'put archivo_local.txt'
- Descargar un archivo:
sftp usuario@servidor:/ruta/remota/archivo_remoto.txt /ruta/local/
El comando rsync
El comando rsync
es una utilidad avanzada para la sincronización y transferencia de archivos en sistemas Unix/Linux. A diferencia de scp
, rsync
es capaz de realizar transferencias incrementales, lo que significa que solo los cambios en los archivos se transfieren, optimizando así el uso del ancho de banda y el tiempo de transferencia. Este comportamiento se logra mediante el uso de un algoritmo de suma de comprobación que detecta diferencias entre los archivos de origen y destino.
La sintaxis básica de rsync
es la siguiente:
rsync [opciones] fuente destino
Un ejemplo típico de uso para sincronizar un directorio local con un directorio en un servidor remoto es:
rsync -avz /directorio/local/ usuario@servidor:/directorio/remoto/
En este ejemplo, las opciones -a
, -v
y -z
se utilizan de la siguiente manera:
-a
(archive) preserva las propiedades de los archivos (permisos, tiempos de modificación, etc.) y copia recursivamente directorios.-v
(verbose) proporciona información detallada sobre el proceso de transferencia.-z
(compress) comprime los datos durante la transferencia para mejorar la eficiencia.
Para copiar solo los archivos nuevos o modificados desde un servidor remoto a un directorio local, se puede usar:
rsync -avz usuario@servidor:/directorio/remoto/ /directorio/local/
rsync
también permite excluir ciertos archivos o directorios de la sincronización mediante la opción --exclude
. Por ejemplo, para excluir archivos temporales:
rsync -avz --exclude='*.tmp' /directorio/local/ usuario@servidor:/directorio/remoto/
Además, rsync
soporta la reanudación de transferencias interrumpidas, lo cual es particularmente útil en conexiones inestables. Esto se logra con la opción --partial
:
rsync -avz --partial /directorio/local/ usuario@servidor:/directorio/remoto/
La autenticación en rsync
sobre SSH se gestiona de manera similar a scp
, utilizando claves SSH para evitar ingresar contraseñas repetidamente. Esto se configura generando un par de claves SSH y añadiendo la clave pública al archivo ~/.ssh/authorized_keys
del usuario remoto.
Una característica destacada de rsync
es su capacidad para realizar transferencias en el modo "dry run" con la opción --dry-run
, que permite simular la sincronización sin realizar cambios reales, útil para verificar qué archivos se transferirán:
rsync -avz --dry-run /directorio/local/ usuario@servidor:/directorio/remoto/
rsync
es una herramienta fundamental en la administración de sistemas y scripts de Bash, especialmente cuando se requiere eficiencia en la transferencia de archivos y directorios en entornos de red. Su flexibilidad y capacidad para manejar múltiples escenarios de sincronización lo convierten en un componente esencial en la caja de herramientas de cualquier desarrollador que trabaje con Shell y comandos Linux.
El comando ssh y conexión con servidores
El comando ssh
(secure shell) es una herramienta fundamental para establecer conexiones seguras con servidores remotos, permitiendo la ejecución remota de comandos y la administración de sistemas de manera segura. Utiliza el protocolo SSH para cifrar las comunicaciones y autenticar a los usuarios, siendo una opción segura para la interacción remota en Linux y la ejecución de scripts de Bash.
La sintaxis básica para establecer una conexión SSH es:
ssh usuario@servidor
Aquí, usuario
es el nombre de usuario en el servidor remoto y servidor
es la dirección IP o el nombre de dominio del servidor. Una vez ejecutado, ssh
solicitará la contraseña del usuario, a menos que se haya configurado la autenticación mediante claves SSH.
Para especificar un puerto diferente al predeterminado (22), usa la opción -p
:
ssh -p 2222 usuario@servidor
La autenticación mediante claves SSH es preferida por su seguridad y conveniencia. Para configurarla, primero genera un par de claves SSH en la máquina local:
ssh-keygen -t rsa -b 4096
Por defecto, las claves se almacenan en ~/.ssh/id_rsa
(clave privada) y ~/.ssh/id_rsa.pub
(clave pública). La clave pública debe copiarse al archivo ~/.ssh/authorized_keys
del usuario en el servidor remoto. Esto se puede hacer fácilmente con el comando ssh-copy-id
:
ssh-copy-id usuario@servidor
Una vez configurada, podrás conectarte al servidor sin necesidad de proporcionar una contraseña cada vez.
ssh
también permite la ejecución remota de comandos directamente desde la línea de comandos, sin necesidad de iniciar una sesión interactiva:
ssh usuario@servidor 'comando_remoto'
Por ejemplo, para listar el contenido del directorio /var/log
en un servidor remoto:
ssh usuario@servidor 'ls /var/log'
Además, ssh
puede redirigir puertos, permitiendo el acceso a servicios en el servidor remoto a través de un túnel seguro. La redirección de puertos locales se realiza con la opción -L
:
ssh -L 8080:localhost:80 usuario@servidor
Esto redirige el puerto 80 del servidor remoto al puerto 8080 de la máquina local, permitiendo acceder a servicios web en el servidor a través de http://localhost:8080
.
La opción -N
permite establecer un túnel SSH sin ejecutar comandos remotos, útil para la redirección de puertos:
ssh -N -L 8080:localhost:80 usuario@servidor
ssh
es una herramienta esencial para cualquier desarrollador que trabaje con Shell y Bash script, proporcionando una base segura para la administración remota de sistemas y la ejecución de comandos en entornos de servidores.
Todas las lecciones de Bash
Accede a todas las lecciones de Bash y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Principales Distribuciones De Linux
Introducción Y Entorno
Instalar Ubuntu En Windows Con Wsl
Introducción Y Entorno
Introducción A Shell Y Bash
Introducción Y Entorno
Comandos De Navegación Pwd, Cd Y Ls
Navegación Y Gestión De Archivos Y Directorios
Manipulación De Archivos Y Directorios
Navegación Y Gestión De Archivos Y Directorios
Comprimir Y Descomprimir Archivos En Bash Con Tar Y Gzip
Navegación Y Gestión De Archivos Y Directorios
Manipulación De Permisos De Archivos Y Directorios Con Chmod, Chown Y Chgrp
Navegación Y Gestión De Archivos Y Directorios
Enlaces Simbólicos Y Duros
Navegación Y Gestión De Archivos Y Directorios
Redirección Y Tuberías
Navegación Y Gestión De Archivos Y Directorios
Gestión De Procesos Con Ps, Htop Y Pgrep
Gestión De Procesos Y Servicios
Gestión De Servicios Con Systemd
Gestión De Procesos Y Servicios
Configuración De Bash
Interacción Con El Sistema
Redes Y Comunicación Con Ifconfig, Ip Y Netstat
Interacción Con El Sistema
Transferencia De Archivos Y Comunicación Remota Con Ssh
Interacción Con El Sistema
Gestión De Paquetes Y Dependencias Y Actualización Del Sistema
Interacción Con El Sistema
Variables Y Tipos De Datos
Sintaxis Y Creación De Scripts En Bash
Operadores
Sintaxis Y Creación De Scripts En Bash
Sintaxis De Control De Flujo
Sintaxis Y Creación De Scripts En Bash
Expresiones Regulares Y Manipulación De Texto
Sintaxis Y Creación De Scripts En Bash
Definición Y Uso De Funciones
Sintaxis Y Creación De Scripts En Bash
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender el uso y diferencias entre
scp
yrsync
para transferir archivos en Bash. - Configurar autenticación SSH mediante claves para mejorar la seguridad en las conexiones.
- Realizar trasferencias seguras de archivos entre sistemas utilizando
scp
yrsync
. - Ejecutar comandos y administrar servidores remotos utilizando
ssh
. - Aplicar técnicas de compresión y optimización en la transferencia de datos.
- Establecer túneles SSH para redirección segura de puertos.