SCP远程文件拷贝

本文详细介绍了SCP命令的使用方法,SCP是secure copy的缩写,用于在Linux和Windows系统间进行远程文件拷贝。文章提供了丰富的参数说明及实例,如如何复制文件和目录,以及如何在不同系统间进行数据传输。

scp是 secure copy的缩写。scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝。scp 命令不局限于linux ,因为在windows 下也有(windows 10 专业版也有)。 因此可以用于windows 和 Linux 主机间数据传输。

环境:linux (ubuntu 系统),windows( windows10 专业版 )
注:在centos 下也可以(包括从windows 到centos,还是centos 到其它linux 发行版)

在windows 下和 linux scp 命令的参数选项是一样的
在这里插入图片描述

参数说明:

-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

实例

从本地复制到远程

这里分别使用windows 和 Linux 下文件传输
命令格式:

scp local_file remote_username@remote_ip:remote_folder 
或者 
scp local_file remote_username@remote_ip:remote_file 

第 1 个命令格式保留了源文件名,第 2 个命令格式更改了源文件名
演示

在windows上操作

 scp README.html zhang@132.232.94.250:/home/zhang/scp/

在这里插入图片描述
在Linux服务器上,并进行更名操作

scp hello_scp zhang@132.232.94.250:/home/zhang/scp/tencent_host_hello_scp

在这里插入图片描述
在这里插入图片描述
复制目录到远程主机
在windows上操作

 scp -r conf zhang@132.232.94.250:/home/zhang/scp/

在这里插入图片描述
在linux 服务器上操作

scp -r test_scp zhang@132.232.94.250:/home/zhang/scp/

在这里插入图片描述
在这里插入图片描述

从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可

在windows主机下

scp zhang@132.232.94.250:/home/zhang/scp/tencent_host_hello_scp E:\blog\scp

在这里插入图片描述
在这里插入图片描述

在linux 主机上

scp -r zhang@132.232.94.250:/home/zhang/scp /home/zhang/scp

在这里插入图片描述

<think>嗯,用户这次的问题是关于在CentOS系统上配置SCP免密文件拷贝的。从问题描述看,用户应该是个系统管理员或者开发者,需要在不同服务器之间高效传输文件。ta明确提到了“CentOS”和“免密码”,说明需求很具体。 用户可能正在搭建分布式环境,或者需要频繁在多台机器间同步数据。手动输入密码显然效率太低,还可能影响自动化脚本的运行。ta的深层需求其实是实现服务器间的无缝协作,减少人工干预。 我注意到用户提供了详细的参考引用,包括建立SSH信任、密钥生成、公钥分发等步骤。这些引用质量不错,特别是引用[3]的操作步骤非常清晰。不过引用[4]关于双向配置的部分可能有点多余,因为用户只问了单向拷贝。 在整理方案时,我需要特别注意: 1. 密钥类型的选择:现在推荐用更安全的ed25519,但传统rsa兼容性更好 2. 权限设置:.ssh目录700和authorized_keys文件600这两个权限必须严格 3. 防火墙问题:很多用户会忽略223端口是否开放 4. SELinux的影响:特别是CentOS 7以上版本 用户可能遇到的坑包括: - 如果已有密钥却重新生成会覆盖原有密钥 - 公钥文件末尾缺少换行导致验证失败 - 目标服务器.ssh目录属主不对 我应该把验证步骤写得详细些,比如用ssh -v调试连接。还可以补充个常见问题排查表,这样用户遇到问题能快速定位。对了,安全方面要提醒用户禁止root登录,这是很多教程忽略的。 相关问题的设计要围绕扩展场景: 1. 多服务器配置是自然延伸 2. 端口问题实际中经常遇到 3. 安全加固是必要提醒 4. 自动化脚本则是高级需求 最后决定用分步式说明,每步包含操作命令和原理注释。验证环节特别加入“首次连接需确认指纹”的提示,避免用户卡在这步。防火墙部分单独强调,因为云服务器经常默认关闭端口。</think>以下是在CentOS系统中配置SCP免密文件拷贝的详细步骤,基于SSH密钥认证实现: ### 步骤1:生成密钥对(源服务器操作) ```bash ssh-keygen -t rsa -b 4096 ``` * 连续按3次回车(默认路径`~/.ssh/id_rsa`,不设置密码) * 生成两个文件: `id_rsa`(私钥,权限必须为600) `id_rsa.pub`(公钥,需传输到目标服务器) ### 步骤2:拷贝公钥到目标服务器 #### 方法1:使用`ssh-copy-id`(推荐) ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub username@target_ip ``` * 首次需输入目标服务器密码 * 自动将公钥追加到目标服务器的`~/.ssh/authorized_keys` #### 方法2:手动复制(无`ssh-copy-id`时) ```bash # 在源服务器执行 scp ~/.ssh/id_rsa.pub username@target_ip:~/tmp.pub # 登录目标服务器执行 mkdir -p ~/.ssh cat ~/tmp.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys rm ~/tmp.pub ``` ### 步骤3:验证免密登录 ```bash ssh username@target_ip ``` * 若直接登录成功,表明密钥配置正确 ### 步骤4:执行免密SCP传输 ```bash # 从本地复制到远程 scp /local/file.txt username@target_ip:/remote/path/ # 从远程复制到本地 scp username@target_ip:/remote/file.txt /local/path/ ``` 此时无需输入密码即可完成传输[^3]。 --- ### 关键配置检查 | **项目** | **目标服务器要求** | |-------------------|--------------------------------------| | 文件权限 | `.ssh`目录700, `authorized_keys`文件600 | | SELinux状态 | 若启用可能需`restorecon -Rv ~/.ssh` | | SSH服务配置 | 确认`/etc/ssh/sshd_config`包含: | | | `PubkeyAuthentication yes` | | | `AuthorizedKeysFile .ssh/authorized_keys` | --- ### 常见问题排查 1. **权限错误** ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` 2. **SELinux阻止** ```bash restorecon -Rv ~/.ssh # 修复上下文 setenforce 0 # 临时禁用SELinux(测试用) ``` 3. **SSH服务未重启** ```bash sudo systemctl restart sshd ``` 4. **防火墙拦截** ```bash sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload ``` > 安全提示:生产环境建议使用`ed25519`密钥(`ssh-keygen -t ed25519`)并禁用密码登录[^4]。 --- ### 相关问题 1. 如何配置多台服务器之间的双向免密SCP传输? 2. SCP传输速度慢如何优化? 3. 非默认SSH端口(非22)如何实现免密SCP? 4. 如何通过SCP实现目录的实时同步? 5. 如何限制免密登录用户的执行权限? [^1]: 通过SSH密钥认证实现自动化文件传输 [^3]: 公钥分发与权限配置是免密操作的核心 [^4]: 密钥类型选择与安全策略增强
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值