Transferir archivos de remoto a local usando SCP

Transferir archivos de remoto a local usando SCP
Shell

Copiar archivos de forma segura: una guía para usar SCP

El Protocolo de copia segura (SCP) es una poderosa herramienta para transferir archivos y directorios de forma segura entre un servidor remoto y una máquina local. Si usa SSH con frecuencia para acceder a su servidor, saber cómo usar SCP de manera efectiva puede optimizar su flujo de trabajo, garantizando que pueda copiar archivos importantes de manera rápida y segura desde su servidor remoto a su sistema local.

En esta guía, lo guiaremos a través de los pasos para copiar una carpeta remota llamada "foo" a su directorio local en /home/user/Desktop. Ya sea que esté administrando copias de seguridad, implementando código o simplemente necesite mover archivos, comprender los comandos SCP hará que sus tareas sean más fáciles y eficientes.

Dominio Descripción
scp -r Copie de forma segura todo el directorio desde la máquina remota a la local.
paramiko.SFTPClient.from_transport() Crea un cliente SFTP a partir de un transporte SSH existente.
os.makedirs() Crea un directorio de forma recursiva, asegurando que se creen todos los directorios de nivel intermedio.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Agrega automáticamente la clave de host del servidor sin preguntar, lo que resulta útil para secuencias de comandos.
scp.listdir_attr() Enumera los atributos de los archivos en un directorio, lo que permite la funcionalidad de copia recursiva.
paramiko.S_ISDIR() Comprueba si una ruta determinada es un directorio, lo que ayuda en la copia recursiva.
scp.get() Copia un archivo del servidor remoto a la máquina local.

Explicación detallada de los scripts SCP

El primer ejemplo de script demuestra el uso de la scp -r comando para copiar un directorio remoto a una máquina local. El scp El comando, que significa Protocolo de copia segura, es una herramienta de línea de comandos que utiliza SSH para transferir archivos de forma segura entre un host remoto y una máquina local. El -r El indicador en el comando especifica que la operación debe ser recursiva, lo que significa que copiará todos los archivos y directorios dentro del directorio especificado. La estructura del comando es sencilla: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. Aquí, user@remote_host especifica el usuario remoto y el host, y /path/to/remote/folder y /home/user/Desktop/ son las rutas de origen y destino, respectivamente.

El segundo ejemplo es un script de shell que automatiza el proceso SCP. Este script define variables para el usuario remoto, el host y las rutas, lo que facilita su reutilización y modificación. El guión utiliza scp -r dentro de un script Bash para transferir archivos, lo que ayuda en escenarios donde se requieren transferencias repetitivas. También incluye un mensaje de notificación para informar al usuario cuando se completa la transferencia. El tercer ejemplo utiliza Python con la biblioteca Paramiko, que es particularmente útil para flujos de trabajo más complejos o automatizados. El script configura un cliente SSH y utiliza el paramiko.SFTPClient.from_transport() método para crear una sesión SFTP. Luego define una función para copiar recursivamente archivos desde el servidor remoto al directorio local usando scp.listdir_attr() y paramiko.S_ISDIR() para diferenciar entre archivos y directorios. Este enfoque es beneficioso para quienes prefieren las secuencias de comandos en Python y necesitan integrar la funcionalidad de transferencia de archivos en secuencias de comandos de automatización más grandes.

Uso de SCP para transferir archivos desde un servidor remoto a una máquina local

Script de Shell para SCP

# Basic SCP command to copy a remote folder to a local directory
scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/

# Breakdown of the command:
# scp: invokes the SCP program
# -r: recursively copies entire directories
# user@remote_host:/path/to/remote/folder: specifies the user and path to the remote folder
# /home/user/Desktop/: specifies the local destination directory

# Example usage with real values:
scp -r user@example.com:/var/www/foo /home/user/Desktop/

Automatización de la transferencia SCP con un script de Shell

Script de Shell para automatizar SCP

#!/bin/bash
# This script automates the SCP process

# Variables
REMOTE_USER="user"
REMOTE_HOST="remote_host"
REMOTE_PATH="/path/to/remote/folder"
LOCAL_PATH="/home/user/Desktop/"

# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} ${LOCAL_PATH}

# Notify user of completion
echo "Files have been copied successfully from ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} to ${LOCAL_PATH}"

Script Python para transferencia de archivos SCP

Secuencia de comandos de Python usando la biblioteca Paramiko

import paramiko
import os

# Establish SSH client
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='user', password='password')

# SCP command
scp = paramiko.SFTPClient.from_transport(ssh.get_transport())

# Define remote and local paths
remote_path = '/path/to/remote/folder'
local_path = '/home/user/Desktop/'

# Function to recursively copy files
def recursive_copy(remote_path, local_path):
    os.makedirs(local_path, exist_ok=True)
    for item in scp.listdir_attr(remote_path):
        remote_item = remote_path + '/' + item.filename
        local_item = os.path.join(local_path, item.filename)
        if paramiko.S_ISDIR(item.st_mode):
            recursive_copy(remote_item, local_item)
        else:
            scp.get(remote_item, local_item)

# Start copy process
recursive_copy(remote_path, local_path)

# Close connections
scp.close()
ssh.close()
print(f"Files have been copied successfully from {remote_path} to {local_path}")

Uso avanzado de SCP: consejos y trucos

Más allá del uso básico de scp Para copiar archivos y directorios, existen varias técnicas y opciones avanzadas que pueden mejorar su experiencia de transferencia de archivos. Una característica útil es la capacidad de limitar el ancho de banda utilizado durante la transferencia, lo que puede resultar especialmente útil cuando se trabaja con recursos de red limitados. Esto se puede lograr utilizando el -l opción seguida del límite de ancho de banda en kilobits por segundo, por ejemplo, scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. Otra opción útil es la -C flag, que permite la compresión, lo que potencialmente acelera la transferencia de archivos grandes.

La seguridad es otro aspecto crítico a considerar al utilizar scp. Mientras scp utiliza inherentemente SSH para transferencias seguras, existen pasos adicionales que puede seguir para mejorar la seguridad. Por ejemplo, utilizar claves SSH para la autenticación en lugar de contraseñas puede mejorar significativamente la seguridad y la comodidad. Además, puede especificar un puerto SSH diferente usando el -P opción si su servidor no utiliza el puerto predeterminado 22. Por ejemplo, scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ le permite conectarse a un servidor que ejecuta SSH en el puerto 2222.

Preguntas y respuestas frecuentes sobre SCP

  1. ¿Cómo copio un archivo de local a remoto usando SCP?
  2. Puedes usar scp local_file user@remote_host:/path/to/remote/directory.
  3. ¿Cómo puedo verificar el progreso de la transferencia de SCP?
  4. Utilizar el -v Opción para habilitar el modo detallado: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. ¿Puedo conservar los atributos del archivo mientras uso SCP?
  6. Sí, usa el -p Opción para preservar tiempos de modificación, tiempos de acceso y modos: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. ¿Cómo uso SCP con una clave SSH diferente?
  8. Especifique la clave SSH con el -i opción: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. ¿Cómo manejo transferencias de archivos grandes con SCP?
  10. Utilizar el -C opción para la compresión y el -l Opción para limitar el ancho de banda: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. ¿Cómo transfiero archivos usando SCP a través de un puerto SSH diferente?
  12. Utilizar el -P opción para especificar el puerto: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. ¿Puede SCP manejar enlaces simbólicos?
  14. Sí el -r La opción copiará enlaces simbólicos, así como archivos y directorios.
  15. ¿Qué sucede si se interrumpe una transferencia SCP?
  16. Vuelva a ejecutar el scp comando para reanudar la transferencia; omitirá los archivos que ya fueron copiados.
  17. ¿Cómo uso SCP con una contraseña en un script?
  18. Se recomienda usar claves SSH en su lugar, pero puedes usar herramientas como sshpass para autenticación de contraseña en scripts.

Reflexiones finales sobre el uso de SCP

Comprender cómo utilizar SCP para transferir archivos y directorios desde un servidor remoto a una máquina local puede mejorar enormemente la eficiencia de su flujo de trabajo. Al dominar tanto los comandos básicos como las técnicas avanzadas, podrá garantizar transferencias de datos seguras y eficientes. Ya sea que esté copiando archivos individuales o directorios completos, automatizando tareas con scripts o usando Python para operaciones más complejas, SCP sigue siendo una herramienta versátil y poderosa para sus necesidades de administración de datos.