问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用 SCP 将文件夹和文件从远程复制到本地

创作时间:
作者:
@小白创作中心

使用 SCP 将文件夹和文件从远程复制到本地

引用
1
来源
1.
https://www.tempmail.us.com/zh/shell/%E4%BD%BF%E7%94%A8-scp-%E5%B0%86%E6%96%87%E4%BB%B6%E5%A4%B9%E5%92%8C%E6%96%87%E4%BB%B6%E4%BB%8E%E8%BF%9C%E7%A8%8B%E5%A4%8D%E5%88%B6%E5%88%B0%E6%9C%AC%E5%9C%B0

安全复制协议(SCP)是一种用于在远程和本地计算机之间传输文件和目录的便捷工具。如果您经常使用 SSH 访问服务器,那么了解如何有效地复制文件夹和文件对于管理数据至关重要。

在本指南中,我们将探讨如何使用 SCP 复制名为 富 到您的本地计算机,特别是 /home/用户/桌面。本教程假设您对 SSH 和终端命令有基本的了解。

命令
描述
scp -r
以递归方式安全地将目录及其内容从远程主机复制到本地计算机。
paramiko.SSHClient()
使用Python创建SSH客户端实例以方便SSH操作。
scp.get()
使用Python中的SCP客户端将文件或目录从远程主机检索到本地路径。
ansible.builtin.fetch
Ansible 模块用于将文件从远程计算机获取到本地计算机。
flat: no
Ansible 获取模块中的选项可在复制时维护目录结构。
validate_checksum: yes
通过验证其校验和来确保复制文件的完整性。

了解 SCP 文件传输

提供的 shell 脚本演示了如何使用scp将文件夹从远程服务器复制到本地计算机。首先,它定义远程用户名、主机和目录以及本地目录的变量。然后该脚本执行scp -r命令,代表“安全复制”并允许递归复制目录。语法**${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}指定源路径,同时${LOCAL_DIR}**指定本地计算机上的目标路径。该脚本通过回显成功消息来结束。

Python 脚本实现了相同的目标,但使用了paramiko处理 SSH 连接的库和scp库来执行安全复制。导入必要的库后,它会为远程和本地目录设置变量。该脚本使用以下命令创建 SSH 客户端实例paramiko.SSHClient()并使用以下命令连接到远程服务器connect方法。然后它创建一个 SCP 客户端实例SCPClient(ssh.get_transport())并使用scp.get方法将远程目录复制到本地计算机。最后,脚本关闭 SCP 客户端。

使用 Ansible 自动进行文件传输

Ansible playbook 是将文件从远程服务器复制到本地计算机的另一种方法。 Ansible 使用基于 YAML 的配置来定义任务。该剧本首先命名任务并指定主机,在本例中为 localhost。然后它定义一个任务来使用以下命令获取远程文件夹ansible.builtin.fetch模块。这src属性指定远程目录,而dest属性指定本地目的地。这flat: no选项确保在复制过程中保持目录结构。

fail_on_missing: yes选项确保如果源目录不存在,剧本将会失败,从而提供了额外的错误处理层。此外,validate_checksum: yes选项通过检查其校验和来验证复制文件的完整性,确保文件已正确传输且没有损坏。此方法对于以一致且可靠的方式自动执行重复文件传输任务特别有用。

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

用于 SCP 文件传输的 Shell 脚本

#!/bin/bash
# Define variables
REMOTE_USER="your_username"
REMOTE_HOST="your_server_address"
REMOTE_DIR="/path/to/remote/folder"
LOCAL_DIR="/home/user/Desktop"
# Execute SCP command
scp -r ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR} ${LOCAL_DIR}
echo "Folder copied successfully to ${LOCAL_DIR}"

使用 Python 自动化 SCP 文件传输

用于自动 SCP 传输的 Python 脚本

import paramiko
from scp import SCPClient

# Define variables
remote_user = "your_username"
remote_host = "your_server_address"
remote_dir = "/path/to/remote/folder"
local_dir = "/home/user/Desktop"

# Create SSH client and connect
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(remote_host, username=remote_user)

# Create SCP client and transfer files
scp = SCPClient(ssh.get_transport())
scp.get(remote_dir, local_dir, recursive=True)
scp.close()

使用 Ansible 管理 SCP 文件传输

用于 SCP 文件传输的 Ansible Playbook

---
- name: Copy folder from remote to local
  hosts: localhost
  tasks:
- name: Copy remote folder to local directory
      ansible.builtin.fetch:
        src: "/path/to/remote/folder"
        dest: "/home/user/Desktop"
        flat: no
        fail_on_missing: yes
        validate_checksum: yes

高级 SCP 技术和注意事项

除了基本的文件传输之外,SCP 还提供了多种高级功能和选项,对于更复杂的任务来说非常有用。其中一项功能是能够使用通配符指定多个文件或目录。例如,使用scp user@remote_host:/path/to/files/*.txt /local/path/会将所有 .txt 文件从远程目录复制到本地目录。在处理大量文件时,这可以节省时间并简化工作流程。

另一个有用的功能是17 号选项,允许您指定 SCP 连接的端口号。如果您的 SSH 服务在非标准端口上运行,这尤其方便。例如,使用scp -P 2222 user@remote_host:/path/to/file /local/path/将连接到端口 2222 上的远程主机。此外,19 号选项可用于在传输过程中压缩数据,这可以显着减少大文件的传输时间。这是通过添加来实现的-C到 SCP 命令,例如scp -C user@remote_host:/path/to/largefile /local/path/

有关 SCP 文件传输的常见问题

  1. 如何使用 SCP 复制整个目录?
    使用命令scp -r user@remote_host:/path/to/remote/dir /local/path/递归复制目录。

  2. 我可以使用 SCP 从特定端口复制文件吗?
    是的,您可以指定端口scp -P port_number user@remote_host:/path/to/file /local/path/

  3. 如何使用 SCP 复制多个文件?
    使用通配符,例如scp user@remote_host:/path/to/files/*.txt /local/path/复制多个文件。

  4. SCP传输期间是否可以压缩文件?
    是的,添加19 号SCP 命令的选项,例如scp -C user@remote_host:/path/to/file /local/path/

  5. 如何在 SCP 传输过程中确保文件完整性?
    使用validate_checksumAnsible 中的选项或在传输后手动验证校验和。

关于 SCP 转移的最终想法:

掌握使用SCP在远程和本地计算机之间进行文件传输是高效服务器管理的一项基本技能。通过利用shell脚本、Python 脚本和 Ansible playbook,您可以自动化并简化这些任务,从而节省时间并减少错误。递归复制、端口规范和数据压缩等高级选项进一步增强了 SCP 的多功能性。无论是日常操作还是大规模数据迁移,了解这些技术都可以确保文件传输安全可靠。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号