????????SCP(Secure Copy Protocol)是一种基于SSH(Secure Shell)的文件传输协议。它用于在本地主机和远程主机之间安全地复制文件和目录,或者在两个远程主机之间传输。由于SCP使用SSH进行数据传输,因此它提供了与SSH相同的安全性,包括数据加密和用户认证。
scp [本地文件路径] [用户名]@[远程主机地址]:[远程文件路径]
??????假设我们本地是windows操作系统,我们来演示一下如何把windows本地的文件通过scp传输到远程Linux服务器上。
可以进入到我们要传输文件所在的目录去打开cmd窗口,这样会方便些
把本地的testscp.png图片拷贝到远程服务器192.168.0.163上的/home/flmtest/目录下
注意:
????????我这里用的-P 2222 参数,因为我远程服务器的SSH端口是2222,如果是默认端口22的话,
-P 2222 就可以不写了,下面我们来执行命令看看效果👇
scp -P 2222 testscp.png flmtest@192.168.0.163:/home/flmtest/
界面显示传输成功
通过Xftp工具远程验证一下文件是否拷贝成功
文件传输成功
? 与《从本地复制到远程》正好相反,这里给出命令写法,就不做演示了
scp [用户名]@[远程主机地址]:[远程文件路径] [本地文件路径]
??使用 -r
参数可以递归地复制整个目录,下面给出命令写法,就不做演示了
scp -r [本地文件路径] [用户名]@[远程主机地址]:[远程文件路径]
????????SCP是一个非常实用的工具,特别适合于系统管理员和需要在不同系统间迅速安全传输文件的用户。
????????使用 scp -C
选项进行文件传输时,它会启用压缩功能。
????????这意味着在传输过程中,数据会被临时压缩,以减少网络上的数据传输量,从而可能加快文件传输速度,特别是在带宽有限或传输大文件时。
????????但需要注意的是,这种压缩是透明的(对于用户来说,这个压缩过程是不可见的,用户不需要手动解压接收到的文件,因为解压是自动进行的),即它仅在传输过程中发生。
scp -C -P 2222 testscp.png flmtest@192.168.0.163:/home/flmtest/
?
-P 端口号: 指定SSH连接的端口。
-p: 保留原文件的修改时间和访问时间。
-r: 递归复制整个目录。
-v: 详细模式,显示详细的传输信息。
-C: 启用压缩,可以加快传输速度。
????????在本地计算机上使用 `ssh-keygen` 命令生成密钥对。
????????默认情况下,这将在 `~/.ssh` 目录下创建一个 RSA 密钥对(`id_rsa` 和 `id_rsa.pub`)。
ssh-keygen -t rsa -b 2048
你可以选择为密钥对设置密码(推荐),这样即使私钥泄露,不知道密码的人也无法使用它。
????????使用 `ssh-copy-id` 命令将公钥复制到远程服务器,这将把你的公钥添加到远程服务器的 `~/.ssh/authorized_keys` 文件中。
ssh-copy-id 用户名@远程服务器地址
????????如果 ssh-copy-id
不可用,你可以手动复制公钥。
????????首先,使用 cat
命令查看并复制你的公钥内容:
cat ~/.ssh/id_rsa.pub
????????然后,登录到远程服务器,编辑 ~/.ssh/authorized_keys
文件,并粘贴你的公钥。
这里需要注意:如果authorized_keys和.ssh目录都不存在,则需要我们手动创建一下
(1)创建 .ssh
目录
????????打开终端,然后执行以下命令来创建 .ssh
目录并设置适当的权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh
(2)生成 SSH 密钥对
ssh-keygen
这将在 ~/.ssh
目录下生成一个新的密钥对(默认为 id_rsa
和 id_rsa.pub
)。
(3)创建 authorized_keys
文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
(4)将本地计算机上生成的公钥粘到authorized_keys中
????????完成这些步骤后,authorized_keys
文件就应该设置好了,并且位于 ~/.ssh
目录中,这样就可以使用基于密钥的认证来进行 SSH 连接了。
如上图,测试连接失败了,接着我们在远程服务器上做如下修改👇
sudo vim /etc/ssh/sshd_config
修改内容
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication
可以设置为 no
,如果希望禁用密码认证。修改配置后,需要重启 SSH 服务,命令如下
sudo systemctl restart sshd.service
再次尝试通过密钥方式连接SSH,成功啦~
scp -C -P 2222 testscp.png flmtest@192.168.0.163:/home/flmtest/
? ? ? ? 最后总结一下,本文主要介绍了`scp`(安全拷贝)的多种实用技巧,旨在帮助大家在Linux系统中高效、安全地进行文件传输。
????????此外,还介绍了如何使用压缩选项来加速文件传输,这些实用小技巧将使`scp`的使用变得更加灵活和高效,对于日常管理Linux系统的专业人士和爱好者都是非常有价值的参考,如果喜欢的话就赶快收藏关注吧~。