Bestanden overbrengen van extern naar lokaal met behulp van SCP

Bestanden overbrengen van extern naar lokaal met behulp van SCP
Shell

Bestanden veilig kopiëren: een handleiding voor het gebruik van SCP

Secure Copy Protocol (SCP) is een krachtig hulpmiddel voor het veilig overbrengen van bestanden en mappen tussen een externe server en een lokale machine. Als u regelmatig SSH gebruikt om toegang te krijgen tot uw server, kan het weten hoe u SCP effectief kunt gebruiken uw workflow stroomlijnen, zodat u snel en veilig belangrijke bestanden van uw externe server naar uw lokale systeem kunt kopiëren.

In deze handleiding leiden we u door de stappen voor het kopiëren van een externe map met de naam "foo" naar uw lokale map op /home/user/Desktop. Of u nu back-ups beheert, code implementeert of alleen bestanden moet verplaatsen: als u de SCP-opdrachten begrijpt, worden uw taken eenvoudiger en efficiënter.

Commando Beschrijving
scp -r Kopieert veilig volledige mappen van een externe naar een lokale machine.
paramiko.SFTPClient.from_transport() Creëert een SFTP-client van een bestaand SSH-transport.
os.makedirs() Creëert recursief een map, waarbij wordt verzekerd dat alle mappen op tussenliggend niveau worden gemaakt.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Voegt automatisch de hostsleutel van de server toe zonder daarom te vragen, handig voor scripting.
scp.listdir_attr() Geeft een overzicht van de kenmerken van bestanden in een directory, waardoor recursieve kopieerfunctionaliteit mogelijk wordt.
paramiko.S_ISDIR() Controleert of een bepaald pad een map is, wat helpt bij recursief kopiëren.
scp.get() Kopieert een bestand van de externe server naar de lokale machine.

Gedetailleerde uitleg van SCP-scripts

Het eerste scriptvoorbeeld demonstreert het gebruik van de scp -r opdracht om een ​​externe map naar een lokale machine te kopiëren. De scp command, wat staat voor Secure Copy Protocol, is een opdrachtregelprogramma dat SSH gebruikt om bestanden veilig over te dragen tussen een externe host en een lokale machine. De -r flag in de opdracht geeft aan dat de bewerking recursief moet zijn, wat betekent dat alle bestanden en mappen binnen de opgegeven map worden gekopieerd. De commandostructuur is eenvoudig: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. Hier, user@remote_host specificeert de externe gebruiker en host, en /path/to/remote/folder En /home/user/Desktop/ zijn respectievelijk de bron- en bestemmingspaden.

Het tweede voorbeeld is een shellscript dat het SCP-proces automatiseert. Dit script definieert variabelen voor de externe gebruiker, host en paden, waardoor deze gemakkelijk opnieuw kunnen worden gebruikt en aangepast. Het script gebruikt scp -r binnen een Bash-script om bestanden over te dragen, wat helpt in scenario's waarin herhaalde overdrachten vereist zijn. Het bevat ook een meldingsbericht om de gebruiker te informeren wanneer de overdracht is voltooid. In het derde voorbeeld wordt Python gebruikt met de Paramiko-bibliotheek, wat vooral handig is voor complexere of geautomatiseerde workflows. Het script stelt een SSH-client in en gebruikt de paramiko.SFTPClient.from_transport() methode om een ​​SFTP-sessie te maken. Vervolgens definieert het een functie om bestanden recursief van de externe server naar de lokale map te kopiëren met behulp van scp.listdir_attr() En paramiko.S_ISDIR() om onderscheid te maken tussen bestanden en mappen. Deze aanpak is gunstig voor degenen die de voorkeur geven aan scripting in Python en de functionaliteit voor bestandsoverdracht moeten integreren in grotere automatiseringsscripts.

SCP gebruiken om bestanden over te zetten van een externe server naar een lokale machine

Shell-script voor 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/

SCP-overdracht automatiseren met een Shell-script

Shell-script voor het automatiseren van 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}"

Python-script voor SCP-bestandsoverdracht

Python-script met behulp van de Paramiko-bibliotheek

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}")

Geavanceerd SCP-gebruik: tips en trucs

Voorbij het basisgebruik van scp voor het kopiëren van bestanden en mappen zijn er verschillende geavanceerde technieken en opties die uw ervaring met bestandsoverdracht kunnen verbeteren. Een handige functie is de mogelijkheid om de bandbreedte die tijdens de overdracht wordt gebruikt te beperken, wat vooral handig kan zijn als u met beperkte netwerkbronnen werkt. Dit kan worden bereikt met behulp van de -l optie gevolgd door de bandbreedtelimiet in kilobits per seconde, bijvoorbeeld scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. Een andere handige optie is de -C flag, die compressie mogelijk maakt, waardoor de overdracht van grote bestanden mogelijk wordt versneld.

Beveiliging is een ander cruciaal aspect waarmee u rekening moet houden bij het gebruik scp. Terwijl scp maakt inherent gebruik van SSH voor veilige overdrachten. Er zijn aanvullende stappen die u kunt nemen om de beveiliging te verbeteren. Het gebruik van SSH-sleutels voor authenticatie in plaats van wachtwoorden kan bijvoorbeeld de veiligheid en het gemak aanzienlijk verbeteren. Bovendien kunt u een andere SSH-poort opgeven met behulp van de -P optie als uw server de standaardpoort 22 niet gebruikt. Bijvoorbeeld scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ Hiermee kunt u verbinding maken met een server waarop SSH draait op poort 2222.

Veelgestelde vragen en antwoorden over SCP

  1. Hoe kopieer ik een bestand van lokaal naar extern met behulp van SCP?
  2. Je kunt gebruiken scp local_file user@remote_host:/path/to/remote/directory.
  3. Hoe kan ik de voortgang van de SCP-overdracht controleren?
  4. Gebruik de -v optie om de uitgebreide modus in te schakelen: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. Kan ik bestandskenmerken behouden tijdens het gebruik van SCP?
  6. Ja, gebruik de -p optie om wijzigingstijden, toegangstijden en modi te behouden: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. Hoe gebruik ik SCP met een andere SSH-sleutel?
  8. Geef de SSH-sleutel op met de -i keuze: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. Hoe ga ik om met grote bestandsoverdrachten met SCP?
  10. Gebruik de -C optie voor compressie en de -l optie om bandbreedte te beperken: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. Hoe breng ik bestanden over met behulp van SCP via een andere SSH-poort?
  12. Gebruik de -P optie om de poort op te geven: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. Kan SCP symbolische links verwerken?
  14. Ja de -r optie kopieert zowel symbolische links als bestanden en mappen.
  15. Wat gebeurt er als een SCP-overdracht wordt onderbroken?
  16. Voer de opnieuw uit scp opdracht om de overdracht te hervatten; het slaat bestanden over die al zijn gekopieerd.
  17. Hoe gebruik ik SCP met een wachtwoord in een script?
  18. Het wordt aanbevolen om in plaats daarvan SSH-sleutels te gebruiken, maar u kunt ook tools gebruiken zoals sshpass voor wachtwoordverificatie in scripts.

Laatste gedachten over SCP-gebruik

Als u begrijpt hoe u SCP kunt gebruiken om bestanden en mappen van een externe server naar een lokale machine over te brengen, kunt u de efficiëntie van uw workflow aanzienlijk verbeteren. Door zowel basisopdrachten als geavanceerde technieken onder de knie te krijgen, kunt u veilige en efficiënte gegevensoverdracht garanderen. Of u nu afzonderlijke bestanden of hele mappen kopieert, taken automatiseert met scripts of Python gebruikt voor complexere bewerkingen, SCP blijft een veelzijdige en krachtige tool voor uw gegevensbeheerbehoeften.