Ö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 kommando för att kopiera en fjärrkatalog till en lokal maskin. De 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 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, anger fjärranvändaren och värddatorn, och och ä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 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 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 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 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 alternativet följt av bandbreddsgränsen i kilobits per sekund, till exempel, . 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 . Medan 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 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.

  1. Hur kopierar jag en fil från lokal till fjärr med SCP?
  2. Du kan använda .
  3. Hur kan jag kontrollera förloppet för SCP-överföringen?
  4. Använd alternativ för att aktivera verbose mode: .
  5. Kan jag bevara filattribut när jag använder SCP?
  6. Ja, använd alternativ för att bevara ändringstider, åtkomsttider och lägen: .
  7. Hur använder jag SCP med en annan SSH-nyckel?
  8. Ange SSH-nyckeln med alternativ: .
  9. Hur hanterar jag stora filöverföringar med SCP?
  10. Använd alternativ för komprimering och alternativ för att begränsa bandbredd: .
  11. Hur överför jag filer med SCP via en annan SSH-port?
  12. Använd alternativ för att ange porten: .
  13. Kan SCP hantera symboliska länkar?
  14. Ja den alternativet kopierar symboliska länkar samt filer och kataloger.
  15. Vad händer om en SCP-överföring avbryts?
  16. Kör om 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 för lösenordsautentisering i skript.

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.