Överföra filer från fjärr till lokal med SCP

Överföra filer från fjärr till lokal med SCP
Shell

Kopiera filer säkert: En guide till att använda SCP

Secure Copy Protocol (SCP) är ett kraftfullt verktyg för att säkert överföra filer och kataloger mellan en fjärrserver och en lokal maskin. Om du ofta använder SSH för att komma åt din server kan du effektivisera ditt arbetsflöde genom att veta hur du effektivt använder SCP, vilket säkerställer att du snabbt och säkert kan kopiera viktiga filer från din fjärrserver till ditt lokala system.

I den här guiden går vi igenom stegen för att kopiera en fjärrmapp med namnet "foo" till din lokala katalog på /home/user/Desktop. Oavsett om du hanterar säkerhetskopior, distribuerar kod eller bara behöver flytta filer, kommer förståelse av SCP-kommandon att göra dina uppgifter enklare och effektivare.

Kommando Beskrivning
scp -r Kopierar säkert hela kataloger från fjärr till lokal maskin.
paramiko.SFTPClient.from_transport() Skapar en SFTP-klient från en befintlig SSH-transport.
os.makedirs() Skapar en katalog rekursivt och säkerställer att alla kataloger på mellannivå skapas.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) Lägger automatiskt till serverns värdnyckel utan uppmaning, användbart för skript.
scp.listdir_attr() Listar attributen för filer i en katalog, vilket möjliggör rekursiv kopieringsfunktion.
paramiko.S_ISDIR() Kontrollerar om en given sökväg är en katalog, vilket hjälper till med rekursiv kopiering.
scp.get() Kopierar en fil från fjärrservern till den lokala maskinen.

Detaljerad förklaring av SCP-skript

Det första skriptexemplet visar användningen av scp -r kommando för att kopiera en fjärrkatalog till en lokal maskin. De scp command, som står för Secure Copy Protocol, är ett kommandoradsverktyg som använder SSH för att överföra filer säkert mellan en fjärrvärd och en lokal dator. De -r flaggan i kommandot anger att operationen ska vara rekursiv, vilket betyder att den kommer att kopiera alla filer och kataloger i den angivna katalogen. Kommandostrukturen är enkel: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/. Här, user@remote_host anger fjärranvändaren och värddatorn, och /path/to/remote/folder och /home/user/Desktop/ är källan respektive destinationsvägarna.

Det andra exemplet är ett skalskript som automatiserar SCP-processen. Det här skriptet definierar variabler för fjärranvändaren, värden och sökvägar, vilket gör det enkelt att återanvända och ändra. Manuset använder scp -r inom ett Bash-skript för att överföra filer, vilket hjälper till i scenarier där repetitiva överföringar krävs. Den innehåller också ett meddelande för att informera användaren när överföringen är klar. Det tredje exemplet använder Python med Paramiko-biblioteket, vilket är särskilt användbart för mer komplexa eller automatiserade arbetsflöden. Skriptet ställer in en SSH-klient och använder paramiko.SFTPClient.from_transport() metod för att skapa en SFTP-session. Den definierar sedan en funktion för att rekursivt kopiera filer från fjärrservern till den lokala katalogen med hjälp av scp.listdir_attr() och paramiko.S_ISDIR() för att skilja mellan filer och kataloger. Detta tillvägagångssätt är fördelaktigt för dem som föredrar skript i Python och behöver integrera filöverföringsfunktioner i större automatiseringsskript.

Använda SCP för att överföra filer från fjärrserver till lokal maskin

Shell Script för 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/

Automatisera SCP-överföring med ett Shell-skript

Shell-skript för automatisering av 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-skript för SCP-filöverföring

Python-skript som använder Paramiko Library

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

Avancerad SCP-användning: Tips och tricks

Utöver den grundläggande användningen av scp för kopiering av filer och kataloger finns det flera avancerade tekniker och alternativ som kan förbättra din filöverföringsupplevelse. En användbar funktion är möjligheten att begränsa bandbredden som används under överföringen, vilket kan vara särskilt användbart när man arbetar med begränsade nätverksresurser. Detta kan uppnås med hjälp av -l alternativet följt av bandbreddsgränsen i kilobits per sekund, till exempel, scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/. Ett annat användbart alternativ är -C flagga, som möjliggör komprimering, vilket kan påskynda överföringen av stora filer.

Säkerhet är en annan viktig aspekt att tänka på när du använder scp. Medan scp använder SSH för säkra överföringar, det finns ytterligare steg du kan vidta för att förbättra säkerheten. Att till exempel använda SSH-nycklar för autentisering istället för lösenord kan förbättra säkerheten och bekvämligheten avsevärt. Dessutom kan du ange en annan SSH-port med hjälp av -P alternativet om din server inte använder standardport 22. Till exempel, scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ låter dig ansluta till en server som kör SSH på port 2222.

Vanliga frågor och svar om SCP

  1. Hur kopierar jag en fil från lokal till fjärr med SCP?
  2. Du kan använda scp local_file user@remote_host:/path/to/remote/directory.
  3. Hur kan jag kontrollera förloppet för SCP-överföringen?
  4. Använd -v alternativ för att aktivera verbose mode: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  5. Kan jag bevara filattribut när jag använder SCP?
  6. Ja, använd -p alternativ för att bevara ändringstider, åtkomsttider och lägen: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  7. Hur använder jag SCP med en annan SSH-nyckel?
  8. Ange SSH-nyckeln med -i alternativ: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  9. Hur hanterar jag stora filöverföringar med SCP?
  10. Använd -C alternativ för komprimering och -l alternativ för att begränsa bandbredd: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  11. Hur överför jag filer med SCP via en annan SSH-port?
  12. Använd -P alternativ för att ange porten: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/.
  13. Kan SCP hantera symboliska länkar?
  14. Ja den -r alternativet kopierar symboliska länkar samt filer och kataloger.
  15. Vad händer om en SCP-överföring avbryts?
  16. Kör om scp kommando för att återuppta överföringen; det kommer att hoppa över filer som redan har kopierats.
  17. Hur använder jag SCP med ett lösenord i ett skript?
  18. Det rekommenderas att använda SSH-nycklar istället, men du kan använda verktyg som sshpass för lösenordsautentisering i skript.

Slutliga tankar om SCP-användning

Att förstå hur man använder SCP för att överföra filer och kataloger från en fjärrserver till en lokal maskin kan avsevärt förbättra ditt arbetsflödeseffektivitet. Genom att behärska både grundläggande kommandon och avancerade tekniker kan du säkerställa säkra och effektiva dataöverföringar. Oavsett om du kopierar enstaka filer eller hela kataloger, automatiserar uppgifter med skript eller använder Python för mer komplexa operationer, förblir SCP ett mångsidigt och kraftfullt verktyg för dina datahanteringsbehov.