Transferència de fitxers de remot a local mitjançant SCP

Transferència de fitxers de remot a local mitjançant SCP
Shell

Còpia de fitxers de manera segura: una guia per utilitzar SCP

El protocol de còpia segura (SCP) és una eina potent per transferir fitxers i directoris de manera segura entre un servidor remot i una màquina local. Si utilitzeu SSH amb freqüència per accedir al vostre servidor, saber com utilitzar SCP de manera efectiva pot agilitzar el vostre flux de treball, assegurant-vos que podeu copiar fitxers importants del vostre servidor remot al vostre sistema local de manera ràpida i segura.

En aquesta guia, us guiarem a través dels passos per copiar una carpeta remota anomenada "foo" al vostre directori local a /home/user/Desktop. Tant si esteu gestionant còpies de seguretat, desplegant codi o simplement necessiteu moure fitxers, entendre les ordres SCP farà que les vostres tasques siguin més fàcils i eficients.

Comandament Descripció
scp -r Copia de manera segura directoris sencers de la màquina remota a la local.
paramiko.SFTPClient.from_transport() Crea un client SFTP a partir d'un transport SSH existent.
os.makedirs() Crea un directori de manera recursiva, assegurant-se que es creen tots els directoris de nivell intermedi.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Afegeix automàticament la clau de l'amfitrió del servidor sense demanar-ho, útil per a l'escriptura.
scp.listdir_attr() Llista els atributs dels fitxers d'un directori, habilitant la funcionalitat de còpia recursiva.
paramiko.S_ISDIR() Comprova si un camí donat és un directori, ajudant a la còpia recursiva.
scp.get() Copia un fitxer del servidor remot a la màquina local.

Explicació detallada dels scripts SCP

El primer exemple de script demostra l'ús de la scp -r comanda per copiar un directori remot a una màquina local. El scp L'ordre, que significa Secure Copy Protocol, és una eina de línia d'ordres que utilitza SSH per transferir fitxers de manera segura entre un host remot i una màquina local. El -r flag a l'ordre especifica que l'operació ha de ser recursiva, és a dir, copiarà tots els fitxers i directoris dins del directori especificat. L'estructura de comandaments és senzilla: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. Aquí, user@remote_host especifica l'usuari remot i l'amfitrió, i /path/to/remote/folder i /home/user/Desktop/ són els camins d'origen i de destinació, respectivament.

El segon exemple és un script shell que automatitza el procés SCP. Aquest script defineix variables per a l'usuari remot, l'amfitrió i els camins, de manera que és fàcil de reutilitzar i modificar. El guió utilitza scp -r dins d'un script de Bash per transferir fitxers, cosa que ajuda en escenaris on es requereixen transferències repetitives. També inclou un missatge de notificació per informar l'usuari quan s'hagi completat la transferència. El tercer exemple utilitza Python amb la biblioteca Paramiko, que és especialment útil per a fluxos de treball més complexos o automatitzats. L'script configura un client SSH i utilitza el paramiko.SFTPClient.from_transport() mètode per crear una sessió SFTP. A continuació, defineix una funció per copiar recursivament fitxers des del servidor remot al directori local scp.listdir_attr() i paramiko.S_ISDIR() per diferenciar entre fitxers i directoris. Aquest enfocament és beneficiós per a aquells que prefereixen scripts en Python i necessiten integrar la funcionalitat de transferència de fitxers en scripts d'automatització més grans.

Ús de SCP per transferir fitxers des del servidor remot a la màquina local

Shell Script per a 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/

Automatització de la transferència SCP amb un script de Shell

Shell Script per automatitzar 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 per a la transferència de fitxers SCP

Script Python utilitzant 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}")

Ús avançat de SCP: consells i trucs

Més enllà de l'ús bàsic de scp per copiar fitxers i directoris, hi ha diverses tècniques i opcions avançades que poden millorar la vostra experiència de transferència de fitxers. Una característica útil és la capacitat de limitar l'ample de banda utilitzat durant la transferència, cosa que pot ser especialment útil quan es treballa amb recursos de xarxa limitats. Això es pot aconseguir utilitzant el -l opció seguida del límit d'ample de banda en kilobits per segon, per exemple, scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. Una altra opció útil és el -C bandera, que permet la compressió, que pot accelerar la transferència de fitxers grans.

La seguretat és un altre aspecte crític a tenir en compte a l'hora d'utilitzar scp. Mentre scp utilitza de manera inherent SSH per a transferències segures, hi ha passos addicionals que podeu fer per millorar la seguretat. Per exemple, utilitzar claus SSH per a l'autenticació en lloc de contrasenyes pot millorar significativament la seguretat i la comoditat. A més, podeu especificar un port SSH diferent mitjançant el -P opció si el vostre servidor no utilitza el port predeterminat 22. Per exemple, scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ us permet connectar-vos a un servidor que executa SSH al port 2222.

Preguntes i respostes més freqüents sobre SCP

  1. Com copio un fitxer de local a remot mitjançant SCP?
  2. Pots fer servir scp local_file user@remote_host:/path/to/remote/directory.
  3. Com puc comprovar el progrés de la transferència SCP?
  4. Utilitzar el -v opció per habilitar el mode detallat: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. Puc conservar els atributs dels fitxers mentre faig servir SCP?
  6. Sí, utilitza el -p opció per conservar els temps de modificació, els temps d'accés i els modes: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. Com puc utilitzar SCP amb una clau SSH diferent?
  8. Especifiqueu la clau SSH amb -i opció: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. Com puc gestionar les transferències de fitxers grans amb SCP?
  10. Utilitzar el -C opció per a la compressió i el -l opció per limitar l'amplada de banda: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. Com puc transferir fitxers mitjançant SCP a través d'un port SSH diferent?
  12. Utilitzar el -P opció per especificar el port: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. Pot SCP gestionar enllaços simbòlics?
  14. Sí, el -r L'opció copiarà enllaços simbòlics, així com fitxers i directoris.
  15. Què passa si s'interromp una transferència SCP?
  16. Torna a executar el scp ordre per reprendre la transferència; saltarà els fitxers que ja s'han copiat.
  17. Com puc utilitzar SCP amb una contrasenya en un script?
  18. Es recomana utilitzar claus SSH, però podeu utilitzar eines com ara sshpass per a l'autenticació de contrasenyes en scripts.

Consideracions finals sobre l'ús de SCP

Entendre com utilitzar SCP per transferir fitxers i directoris des d'un servidor remot a una màquina local pot millorar molt l'eficiència del vostre flux de treball. Dominant tant les ordres bàsiques com les tècniques avançades, podeu garantir transferències de dades segures i eficients. Tant si copieu fitxers únics com directoris sencers, automatitzeu tasques amb scripts o utilitzeu Python per a operacions més complexes, SCP continua sent una eina versàtil i potent per a les vostres necessitats de gestió de dades.