Linux常用命令——scp详解

Linux常用命令——scp详解

​一、scp 概述

scp(Secure Copy)是基于 SSH 协议的安全文件传输工具,支持在本地与远程主机之间加密复制文件和目录。

特点:

加密传输,保障数据安全。支持文件权限、时间戳等元数据的保留。可通过 SSH 密钥或密码认证。

​二、常用命令选项

选项说明-r递归复制目录(必须用于目录)-v显示详细输出(调试用)-q安静模式(不显示进度/错误)-c指定 SSH 客户端程序(如 ssh -p 22)-P指定 SSH 端口(默认 22)-i指定私钥文件(替代密码登录)-o覆盖 SSH 选项(如 -o StrictHostKeyChecking=no)-h以人类可读格式显示文件大小(如 1K)-l限制上传/下载带宽(如 -l 100k)--progress显示传输进度条

​三、使用实例

​1. 本地文件 → 远程主机

scp /local/path/file.txt user@remote_ip:/remote/path/

​说明:将本地 file.txt 复制到远程主机的 /remote/path/ 下。

​2. 远程文件 → 本地

scp user@remote_ip:/remote/path/file.txt /local/path/

​说明:反向操作,将远程文件拉取到本地。

​3. 本地目录 → 远程主机(递归)​

scp -r /local/path/directory user@remote_ip:/remote/path/

​说明:-r 必须用于目录,否则会报错。

​4. 指定 SSH 端口

若远程主机 SSH 端口非默认 22:

scp -P 2222 /local/file.txt user@remote_ip:/remote/path/

​5. 使用密钥认证(免密码)​

提前将公钥 ~/.ssh/id_rsa.pub 上传到远程 ~/.ssh/authorized_keys:

scp -i ~/.ssh/private_key.pem /local/file.txt user@remote_ip:/remote/path/

​6. 保留文件权限

默认保留权限,若需强制设置:

scp -o PreservePermissions=true /local/file.txt user@remote_ip:/remote/path/

​7. 排除特定文件

使用 --exclude 过滤文件:

scp -r --exclude="temp.log" /local/path/ user@remote_ip:/remote/path/

​8. 限制带宽速度

限制上传速度为 100KB/s:

scp -l 100k /local/file.txt user@remote_ip:/remote/path/

​9. 显示传输进度

scp --progress /local/file.txt user@remote_ip:/remote/path/

​四、注意事项

​权限问题

确保远程目录存在且用户有写入权限。若需sudo权限,可使用 sudo scp,但需谨慎操作。

​防火墙设置

确认远程 SSH 端口(默认 22)已放行。

​大文件传输优化

启用压缩:-C(自动协商压缩算法)。分块传输:split + scp 分段传输(适合超大数据)。

​断点续传

scp 不原生支持断点续传,但可借助 rsync 或第三方工具(如 lftp)。

​五、高级用法

​1. 通过中间主机中转

scp -o ProxyCommand="ssh -W %h:%p user@middle_host" /local/file.txt user@remote_ip:/remote/path/

​2. 并行复制多个文件

结合 xargs 或 parallel 工具实现多线程加速。

​六、总结

​适用场景:一次性安全文件传输、脚本自动化备份。​局限性:不适合频繁小文件传输或增量同步(推荐 rsync)。​安全建议:优先使用 SSH 密钥认证,避免密码明文传输。

通过以上示例和选项,可灵活应对大多数文件传输需求。如需进一步优化,可结合 ssh-copy-id 快速部署密钥,或使用 scp2 等增强版本。

相关推荐