0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Linux和类Unix操作系统中使用SCP安全地传输文件

dyquk4xk2p3d 来源:Linux中国 2023-02-23 09:25 次阅读

网络上文件传输可以通过各种不同的方式和协议来完成。远程复制文件最常用的协议是Rsync、SCP和SFTP。在本文中,我们将了解什么是 SCP以及如何在 Linux 和类 Unix 操作系统中使用 SCP 在本地和远程计算机之间安全地传输文件。

什么是 SCP?

SCP,代表安全复制(Secure Copy),它是一个命令行程序,在 Linux 和类 Unix 操作系统中以安全的方式在本地和远程系统之间,或在两个远程系统之间复制文件和目录。

使用scp命令,你可以安全地复制文件或目录:

◈从本地到远程系统

◈从远程系统到本地

◈在两个远程系统之间

使用scp命令传输数据时,文件和目录都是加密的。因此,即使网络被破坏,作恶者也无法获得任何有意义的数据。

SCP 是 openSSH 程序的一个组件,它使用 SSH 协议安全地传输文件。几乎所有现代 Linux 和 Unix 发行版都预装了 OpenSSH,所以不必费心安装它。

提醒一句:

根据 openSSH 开发人员的官方公告:

scp 协议已经过时了,它不灵活且不易修复。我们建议使用更现代的协议,如sftp和rsync来代替。

但是,大多数用户仍然更喜欢 SCP 协议。因为,SCP 处理远程文件传输比同行 SFTP 和 Rsync 更快。

另外,SCP 的工作原理与cp命令完全相同,而rsync则会判断源目录是否有结尾斜杠而出现不同的行为。看一看下面的命令:

◈rsync source destination/- 将source目录复制到destination文件夹内。

◈rsync source/ destination/- 将source目录的内容复制到destination文件夹中。

所以,你必须反复检查是否在路径中添加了斜杠。

我个人使用Rsync ostechnix.com在两台主机之间复制大文件,使用 SCP 在网络上复制单个文件。

SCP 命令语法

SCP 的通用语法如下:

scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

根据文件传输路径的不同,语法也会有所不同。这里我罗列了一些语法格式示例。

从本地复制一个文件到远程系统:

scp SourceFile User@RemoteHost:RemotePath

类似的,从本地系统复制一个目录到远程系统,使用-r参数

scp -r SourceDirectory User@RemoteHost:RemotePath

复制多个文件到远程系统:

scp SourceFile1 SourceFile2 User@RemoteHost:RemotePath

远程系统复制文件到本地:

scp User@RemoteHost:RemoteFilePath DestinationFile

远程系统复制目录到本地:

scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory

在本地将文件在两个远程系统之间复制:

scp User@RemoteHost1:RemoteFile1 User@RemoteHost2:RemotePath

注意,当你在两个远程系统之间复制文件时,流量不会通过本地系统。操作直接在两个远程系统之间进行。但是,你可以使用-3参数让流量经过你运行scp命令的系统。

从你的本地系统将一个远程系统的目录复制到另一个远程系统:

scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath

SCP 命令参数

SCP 命令最常用的参数有:

pYYBAGP2wR2AJatOAAO88jz7UAY983.jpg

SCP 有很多参数,你可以查看它的手册页来了解其他参数。让我们看一些有用的 scp 命令示例。

开始前要记住的重要事项

poYBAGP2wT-AWD1VAAEl4niPtwM574.jpg

在 Linux 中使用 SCP 传输文件

正如我所说,我们可以使用scp命令将文件或目录从本地复制到远程系统,反之亦然,或者在两台远程系统之间复制文件或目录。

1. 使用 SCP 从本地系统复制文件到远程系统

使用scp命令将文件从本地复制到远程系统,运行:

$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/

示例输出:

ostechnix@192.168.1.40's password:

File1.txt 100% 104 814.0KB/s 00:00

让我们分析一下上面的命令,看看每个参数都做了什么。

◈File1.txt- 源文件

◈ostechnix- 远程系统的用户名

◈192.168.1.40- 远程系统的 IP 地址

◈/home/ostechnix/- 远程系统中的目标目录。

这是我们想要传输源文件的绝对路径,如File.txt。

你还可以修改目标文件的名称。下面的命令将File1.txt传输到目的地,保存为myfile.txt。

$ scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/myfile.txt

fce5db86-b309-11ed-bfe3-dac502259ad0.png

将文件从本地复制到远程系统

2. 使用 SCP 从本地系统复制多个文件到远程系统

使用scp命令将多个文件从本地系统传输到远程系统,运行:

$ scp File1.txt File2.txt ostechnix@192.168.1.40:/home/ostechnix/

示例输出:

ostechnix@192.168.1.40's password:

File1.txt 100% 104 689.4KB/s 00:00

File2.txt 100% 496 6.3MB/s 00:00

fd297dc8-b309-11ed-bfe3-dac502259ad0.png

从本地复制多个文件到远程系统

这里:

◈File1.txt和File2.txt- 源文件名

◈ostechnix@192.168.1.40- 远程系统的用户名和 IP 地址

◈/home/ostechnix- 目标文件的路径

如果文件具有相同的扩展名,你可以使用以下替代命令来实现相同的目标。

$ scp {File1,File2}.txt ostechnix@192.168.1.40:/home/ostechnix/

或者,

$ scp *.txt ostechnix@192.168.1.40:/home/ostechnix/

3. 使用 SCP 从本地到远程系统递归复制目录

递归地将整个目录(包括子目录及其内容)从本地复制到远程系统,使用-r参数。

$ scp -r Documents/ ostechnix@192.168.1.40:/home/ostechnix/

fd66d506-b309-11ed-bfe3-dac502259ad0.png

从本地复制目录到远程系统

上述命令将整个Documents目录包括其内容复制到目标系统。

其中,

pYYBAGP2wX6AMI-pAAByEc2QVhM396.jpg

4. 用 SCP 将文件从远程系统传输到本地

还记得我们从本地系统复制了File1.txt到远程系统,让我们把它复制回本地。

使用scp命令从远程系统复制文件到本地,运行:

$ scp ostechnix@192.168.1.40:/home/ostechnix/File1.txt Downloads/

其中

pYYBAGP2wZGAf6WrAABsIj6WkoY523.jpg

fdae12f4-b309-11ed-bfe3-dac502259ad0.png

从远程系统传输文件到本地

5. 使用 SCP 将多个文件从远程系统传输到本地

将多个文件从远程系统复制到本地,在花括号内注明文件的绝对路径,如下所示:

$ scp ostechnix@192.168.1.40:/home/ostechnix/{File1.txt,File2.txt} Downloads/

fdefa6ce-b309-11ed-bfe3-dac502259ad0.png

将多个文件从远程系统传输到本地

上述命令将从远程系统的/home/ostechnix/目录中复制File1.txt和File2.txt到本地的Downloads目录中。

注意,花括号内的逗号后面没有空格。

6. 从远程系统递归复制目录到本地

使用scp从远程系统递归复制整个目录(包括子目录及其内容)到本地系统,使用-r参数。

$ scp -r ostechnix@192.168.1.40:/home/ostechnix/Documents Downloads/

上述命令将从远程系统将整个Documents目录复制到本地的Downloads目录。

7. 使用 SCP 在两台远程计算机之间复制文件

使用scp命令将文件从一个远程系统直接复制到另一个远程系统,运行:

$ scp senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/

它会要求你输入两个远程系统的密码:

其中,

pYYBAGP2wbaADOTBAACa4fm1Zxg605.jpg

上述命令将从远程主机192.168.1.40复制/home/senthil/File1.txt到192.168.1.20上的/home/kumar/目录。

在这种方法中,数据将直接从一个远程系统传输到另一个远程系统。如果你想通过本地机器路由流量,使用-3参数,如下所示:

$ scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/

8. 使用 SCP 复制文件时启用压缩

到目前为止,我们在没有压缩的情况下传输了文件。现在我们将使用-C参数在传输文件时启用压缩。

$ scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/

-C参数将在源端启用压缩,并在目标端自动解压数据。

通过启用压缩,可以显著提高文件复制或传输速度。

9. 使用 SCP 传输文件时限制带宽

我们可以使用-l参数限制带宽。注意,最大带宽单位为 Kbits/s。1 Byte = 8 bit。因此,如果你想将带宽限制在 200KB/s,-l的值将是1600(200*8)。

$ scp -l 1600 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

这在传输大文件时非常有用,可以防止 SCP 限制带宽。

10. 使用 SCP 复制文件时使用不同端口

作为系统管理员,出于安全原因,你可能在远程服务器上更改了 SSH 协议的默认端口 ostechnix.com。这种情况下,你可以在传输文件时使用-P参数指定端口号。注意:大写的P。

$ scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

11. 使用 SCP 复制文件时使用不同的加密方法

默认情况下,SCP 使用AES-128对文件进行加密。如果你想使用不同的加密方法,使用c参数。

例如,如果你想使用3des-cbc加密方法,命令如下所示:

$ scp -c 3des-cbc File1.txt ostechnix@192.168.1.40:/home/ostechnix/

要查看支持的密码列表,执行:

$ ssh -Q cipher localhost | paste -d, -s -

示例输出:

3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com

12. 在详细模式下使用 SCP 复制文件

如果你想知道使用scp复制文件时幕后发生了什么,你可以使用-v参数。使用详细模式传输文件时,终端上会显示执行scp命令执行的每一步过程。这在故障排除时很方便。

$ scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/

在详细模式下发送文件时,你将看到大量输出,如下所示:

feaaa35c-b309-11ed-bfe3-dac502259ad0.png

在详细模式下使用 SCP 复制文件

13. 在安静模式下使用 SCP 传输文件

我们可以使用-q参数在安静模式下传输文件。在安静模式下共享文件时,不会在输出中显示进度、警告或诊断信息

$ scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/

14. 使用 SCP 传输文件时保留文件属性

使用-p参数可以保留文件修改时间、访问时间和模式等文件属性。注意,这是小写的 p。

$ scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/

15. 使用 SCP 复制文件时使用身份文件

SSH 同时支持基于密码和密钥的身份验证。密钥是 Linux 环境中使用最广泛的身份验证方法。

如果你想在传输文件时使用基于密钥的身份验证,使用-i参数指定身份文件或私钥。

$ scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/

16. 使用不同的 ssh 配置文件

在某些情况下,你需要使用不同的网络来连接到 Linux 系统,或你有一个代理服务器。这在情况下,你可以配合-F参数使用不同的ssh_config文件。

$ scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/ostechnix/

17. 使用 IPv4 或 IPv6 复制文件

在复制文件时,我们可以强制 SCP 只使用 IPv4 或 IPv6 地址。IPv4 网络添加-4参数,IPv6 网络添加-6参数可以实现这一点。

$ scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

常见问题

问题 1:什么是 SCP?

SCP 是一个命令行程序,旨在将文件和目录从本地系统安全地传输到远程系统,反之亦然,或者直接在两个远程系统之间传输。

问题 2: 如何使用 SCP 将文件从本地复制到远程计算机?

将文件从本地复制到远程系统,命令如下:

scp SourceFile.txt User@RemoteHost:/some/remote/directory

问题 3:如何递归复制文件和目录?

递归复制包含子目录的目录,使用-r参数:

scp -r /some/local/directory User@RemoteHost:/some/remote/directory

问题 4:使用 SCP 可以传输多个文件吗?

当然,只要用空格分隔源文件名即可。

从本地复制多个文件到远程:

scp file1.txt file2.txt file3.txt User@RemoteHost:/some/remote/directory

scp {file1,file2,file3}.txt User@RemoteHost:/some/remote/directory

scp *.txt User@RemoteHost:/some/remote/directory

从远程复制多个文件到本地:

scp User@RemoteHost:/some/remote/directory/{file1.txt,file2.txt,file3.txt} /some/local/directory

从一个远程系统复制多个文件到另一个远程系统:

$ scp User@RemoteHost1:/some/remote/directory/{file1.txt,file2.txt,file3.txt} User@RemoteHost2:/some/remote/directory/

问题 5:如何传输目录下的所有文件?

传输整个目录,首先进入该目录:

cd dir_name

然后,

scp *.txt User@RemoteHost:/some/remote/directory

问题 6:可以压缩文件吗?

当然。使用-C压缩文件。文件会在源端压缩,在目标端自动解压缩。

scp -C /some/large/file User@RemoteHost:/some/remote/directory

问题 7:可以保留文件属性吗?

保留原始文件的修改时间、访问时间和模式等文件属性,使用-p参数。

scp -p file.txt User@RemoteHost:/some/remote/directory

问题 8: 可以使用其他端口吗?

当然。SCP 配合-P参数允许你使用其他端口。

scp -P 2022 file.txt User@RemoteHost:/some/remote/directory

问题 9: 可以使用不同的加密方法吗?

当然。使用-c参数。

scp -c 3des-cbc User@RemoteHost:/some/remote/directory

问题 10: 如何列出 SSH 支持的加密方法?

使用以下命令查看 SSH 和 SCP 支持的加密方法列表:

ssh -Q cipher localhost | paste -d, -s -

问题 11:SCP 真的安全吗?

当然,它用起来是完全安全的。SCP 和 openSSH 使用相同的 SSH 机制。传输的数据在源端加密,目标端解密。

问题 12:可以从 Windows 系统传输文件到 Linux 吗?

当然。使用PSCP程序将文件从 windows 传输到 Linux 平台,你也可以使用WinSCP。

总结

在这篇全面指南中,我们了解了什么是 SCP,以及如何在 Linux 中使用SCP 安全地传输文件,其中包括17 个 SCP 命令示例,另外还回答了关于 SCP 的常见问题。

无论你是 Linux 管理人员、开发人员还是普通用户,你都会面临某个时候将文件复制到远程系统或从远程系统复制文件的情况,知道如何使用 SCP 安全地复制文件将是非常有用的。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206737
  • UNIX操作系统

    关注

    0

    文章

    13

    浏览量

    15261
  • SSH
    SSH
    +关注

    关注

    0

    文章

    177

    浏览量

    16077
  • SCP
    SCP
    +关注

    关注

    0

    文章

    28

    浏览量

    9097

原文标题:如何在 Linux 中使用 SCP 安全地传输文件

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux与其他操作系统的区别

    访问计算机内的所有可用内存,提供完整的Unix接口。而MS-DOS只支持部分Unix的接口。  就使用费用而言,Linux和MS-DOS是两种完全不同的实体。与其他商业操作系统相比,M
    发表于 09-13 10:12

    LinuxUnix操作系统的一种变种

    的功能:1.对设备初始化和释放.2.把数据从内核传送到硬件和从硬件读取数据.3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据.4.检测和处理设备出现的错误.在Linux操作系统下有两
    发表于 04-02 16:19

    LinuxUnix有哪些不同之处?

    LinuxUnix都是功能强大的操作系统,都是应用广泛的服务器操作系统,有很多相似之处,甚至有一部分人错误地认为Unix
    发表于 03-02 18:51

    什么是UNIX操作系统

    @TOC嵌入式方向在校目前所学到的知识**欢迎使用Markdown编辑器Linux概述linux是一套免费使用和自由传播的UNIX操作系统
    发表于 11-04 07:29

    开源操作系统大全

    开源操作系统即公开源代码的操作系统软件,它遵循开源协议使用、编译和发布。自由和开放源代码软件中最著名的是 Linux ,它是一种 Unix
    发表于 10-27 15:13

    Linux操作系统

    linux的教学内容1 、Linux概述 2 、Linux操作系统安装3、 Linux的内核 4 、Li
    发表于 04-10 16:54 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>

    linux操作系统安全

    linux操作系统安全性 计算机系统安全性的内涵 操作系统安全性功能
    发表于 04-28 15:05 0次下载

    UNIX操作系统类型

    UNIX操作系统类型 由于Unix操作系统众所周知的稳定性、可靠性,用来提供各种Internet服务的计算机运行的操作系统占很大比例的是
    发表于 12-26 12:02 2090次阅读

    Linux操作系统中的PCI驱动开发

    0引言PCI总线是一种成熟的计算机标准总线,而Linux操作系统则是一种源代码公开的操作系统Linux构架完全沿袭了UNIX
    发表于 09-23 15:50 1045次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>中的PCI驱动开发

    Linux操作系统下的PCI驱动开发

    PCI总线是一种成熟的计算机标准总线,而Linux操作系统则是一种源代码公开的操作系统Linux构架完全沿袭了UNIX
    发表于 06-07 10:30 1491次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>下的PCI驱动开发

    unix操作系统有哪些

    Unix操作系统众所周知的稳定性、可靠性,用来提供各种Internet服务的计算机运行的操作系统占很大比例的是UnixUnix
    发表于 11-14 11:49 4.7w次阅读

    unix是什么操作系统_unix操作系统怎么安装

    UNIX系统是一个分时操作系统。最早的UNIX系统于1970年问世。此前,只有面向批处理作业的操作系统
    发表于 09-02 16:01 2.4w次阅读
    <b class='flag-5'>unix</b>是什么<b class='flag-5'>操作系统</b>_<b class='flag-5'>unix</b><b class='flag-5'>操作系统</b>怎么安装

    LINUX操作系统的安装与Linux常用文件命令

    LINUX操作系统的安装与Linux常用文件命令说明。
    发表于 06-02 17:45 2次下载

    使用SCP和Rsync在Linux传输文件

    Linux 中,有时需要将文件从一台计算机传输到另一台计算机。为了完成这个任务,有两个主要的工具可以使用:SCP 和 Rsync。本文将介绍如何使用这两个工具在
    的头像 发表于 05-12 14:32 750次阅读

    linux属于什么操作系统

    Linux属于一种类UNIX操作系统Linux,全称GNU/Linux,是一套免费使用和自由传播的类U
    的头像 发表于 11-08 11:01 1745次阅读