使用SCP将文件从远程传输到本地

使用SCP将文件从远程传输到本地
Shell

安全复制文件:SCP 使用指南

安全复制协议 (SCP) 是一个强大的工具,用于在远程服务器和本地计算机之间安全地传输文件和目录。如果您经常使用 SSH 访问服务器,了解如何有效使用 SCP 可以简化您的工作流程,确保您可以快速安全地将重要文件从远程服务器复制到本地系统。

在本指南中,我们将引导您完成将名为“foo”的远程文件夹复制到 /home/user/Desktop 的本地目录的步骤。无论您是管理备份、部署代码还是只需要移动文件,了解 SCP 命令都将使您的任务变得更轻松、更高效。

命令 描述
scp -r 将整个目录从远程安全地复制到本地计算机。
paramiko.SFTPClient.from_transport() 从现有 SSH 传输创建 SFTP 客户端。
os.makedirs() 递归创建目录,确保创建所有中级目录。
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 自动添加服务器的主机密钥而不提示,对于编写脚本很有用。
scp.listdir_attr() 列出目录中文件的属性,启用递归复制功能。
paramiko.S_ISDIR() 检查给定路径是否是目录,有助于递归复制。
scp.get() 将文件从远程服务器复制到本地计算机。

SCP脚本详解

第一个脚本示例演示了如何使用 scp -r 命令将远程目录复制到本地计算机。这 scp command,代表安全复制协议,是一个命令行工具,它使用 SSH 在远程主机和本地计算机之间安全地传输文件。这 -r 命令中的标志指定操作应该是递归的,这意味着它将复制指定目录中的所有文件和目录。命令结构很简单: scp -r user@remote_host:/path/to/remote/folder /home/user/Desktop/。这里, user@remote_host 指定远程用户和主机,以及 /path/to/remote/folder/home/user/Desktop/ 分别是源路径和目标路径。

第二个示例是一个自动执行 SCP 进程的 shell 脚本。该脚本定义了远程用户、主机和路径的变量,使其易于重用和修改。该脚本使用 scp -r 在 Bash 脚本中传输文件,这在需要重复传输的情况下很有帮助。它还包括一条通知消息,用于在传输完成时通知用户。第三个示例使用 Python 和 Paramiko 库,这对于更复杂或自动化的工作流程特别有用。该脚本设置 SSH 客户端并使用 paramiko.SFTPClient.from_transport() 创建 SFTP 会话的方法。然后,它定义一个函数,使用以下命令将文件从远程服务器递归复制到本地目录: scp.listdir_attr()paramiko.S_ISDIR() 来区分文件和目录。这种方法对于那些喜欢使用 Python 编写脚本并需要将文件传输功能集成到更大的自动化脚本中的人来说是有益的。

使用SCP将文件从远程服务器传输到本地计算机

SCP 的 Shell 脚本

# 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/

使用 Shell 脚本自动化 SCP 传输

用于自动化 SCP 的 Shell 脚本

#!/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}"

用于 SCP 文件传输的 Python 脚本

使用 Paramiko 库的 Python 脚本

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

高级 SCP 用法:提示和技巧

除了基本用法之外 scp 对于复制文件和目录,有多种高级技术和选项可以增强您的文件传输体验。一项有用的功能是能够限制传输过程中使用的带宽,这在使用有限的网络资源时特别有用。这可以通过使用来实现 -l 选项后跟带宽限制(以千比特每秒为单位),例如, scp -r -l 1000 user@remote_host:/path/to/remote/folder /home/user/Desktop/。另一个有用的选项是 -C 标志,它可以启用压缩,从而可能加快大文件的传输速度。

安全性是使用时要考虑的另一个重要方面 scp。尽管 scp 本质上使用 SSH 进行安全传输,因此您可以采取其他步骤来增强安全性。例如,使用 SSH 密钥代替密码进行身份验证可以显着提高安全性和便利性。此外,您可以使用以下命令指定不同的 SSH 端口 17 号 如果您的服务器不使用默认端口 22,则选项。例如, scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/ 允许您连接到在端口 2222 上运行 SSH 的服务器。

关于 SCP 的常见问题和解答

  1. 如何使用 SCP 将文件从本地复制到远程?
  2. 您可以使用 19 号
  3. 如何查看 SCP 传输的进度?
  4. 使用 -v 启用详细模式的选项: scp -v -r user@remote_host:/path/to/remote/folder /home/user/Desktop/
  5. 使用 SCP 时可以保留文件属性吗?
  6. 是的,使用 22 号 保留修改时间、访问时间和模式的选项: scp -p -r user@remote_host:/path/to/remote/folder /home/user/Desktop/
  7. 如何将 SCP 与不同的 SSH 密钥一起使用?
  8. 使用以下命令指定 SSH 密钥 -i 选项: scp -i /path/to/key -r user@remote_host:/path/to/remote/folder /home/user/Desktop/
  9. 如何使用 SCP 处理大文件传输?
  10. 使用 -C 压缩选项和 -l 限制带宽的选项: scp -C -l 1000 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/
  11. 如何通过不同的 SSH 端口使用 SCP 传输文件?
  12. 使用 17 号 指定端口的选项: scp -P 2222 -r user@remote_host:/path/to/remote/folder /home/user/Desktop/
  13. SCP 可以处理符号链接吗?
  14. 是的 -r 选项将复制符号链接以及文件和目录。
  15. 如果 SCP 传输中断会发生什么?
  16. 重新运行 scp 命令恢复传输;它将跳过已经复制的文件。
  17. 如何在脚本中使用带密码的 SCP?
  18. 建议使用 SSH 密钥,但您可以使用类似的工具 sshpass 用于脚本中的密码验证。

关于 SCP 使用的最终想法

了解如何使用 SCP 将文件和目录从远程服务器传输到本地计算机可以大大提高您的工作流程效率。通过掌握基本命令和高级技术,您可以确保安全高效的数据传输。无论您是复制单个文件还是整个目录、使用脚本自动执行任务,还是使用 Python 进行更复杂的操作,SCP 仍然是满足您的数据管理需求的多功能且强大的工具。