简介
scp(secure copy)是基于 SSH 的命令行工具,用于在本地和远程主机之间复制文件或目录。它简单、直接,适合一次性快速传输。下面给出常用语法、选项、示例与实用建议,帮助你在日常运维或开发中高效使用 scp。
一、基本语法
scp [选项] <源路径> <目标路径>
源或目标可以是本地路径,也可以是远程路径,远程路径的格式为:user@host:/path/to/file
示例:
- 本地 -> 远程:
scp file.txt user@remote.example.com:/home/user/ - 远程 -> 本地:
scp user@remote.example.com:/home/user/file.txt ./
二、常用选项(一览)
-
-r:递归复制目录(必需用于目录) -
-P port:指定 SSH 端口(注意是大写 P) -
-i identity_file:使用指定私钥文件进行认证 -
-p:保留文件的修改时间、访问时间和权限 -
-C:启用压缩(传输文本或可压缩数据时有用) -
-l limit:带宽限制,单位为千比特/秒(kbit/s) -
-v:详细输出(调试时使用) -
-o "SSH选项":传递任意 ssh 配置,例如-o "StrictHostKeyChecking=no"
三、常见示例
-
上传单个文件到远程主机:
scp file.txt deploy@server.example.com:/home/deploy/ -
从远程主机下载文件到当前目录:
scp deploy@server.example.com:/home/deploy/file.txt ./ -
递归复制目录到远程:
scp -r mysite/ deploy@server:/var/www/mysite/ -
指定端口和私钥:
scp -P 2222 -i ~/.ssh/id_rsa file.txt deploy@server:/path/ -
远程到远程(在本地穿针引线,两端都允许 SSH 登录):
scp user1@host1:/path/file user2@host2:/path/ -
启用压缩并限速(限速 500 kbit/s):
scp -C -l 500 largefile.tar.gz user@remote:/backup/ -
路径或文件名中包含空格(使用引号):
scp "my file.txt" user@remote:"/remote/path/with space/"
四、实用技巧与注意事项
-
scp 不支持断点续传:如果需要断点续传或增量同步,推荐使用 rsync over SSH,例如:
rsync -avzP -e "ssh -p 2222" ./localdir/ user@remote:/path/ -
常用主机可在
~/.ssh/config中配置别名,避免每次写完整命令:Host myserver HostName server.example.com User deploy Port 2222 IdentityFile ~/.ssh/id_rsa然后只需
scp file.txt myserver:/path/。 权限与路径:目标目录必须有写权限;建议使用绝对路径以避免定位错误(例如
/home/deploy/)。调试连接问题:加
-v查看认证与连接过程,帮助定位问题。安全性:scp 基于 SSH,传输过程被加密。但当需要更多控制或复杂权限、文件过滤时,优先考虑 rsync/sftp。
五、一个小流程示例:把站点上传并部署
- 本地打包:
tar czf site.tar.gz site/ - 上传到远程临时目录(示例端口 2222):
scp -P 2222 site.tar.gz deploy@server:/tmp/ - 远程解压并移动到 web 目录(使用 ssh 远程执行):
ssh -p 2222 deploy@server 'tar xzf /tmp/site.tar.gz -C /var/www/html && rm /tmp/site.tar.gz'
六、结语
scp 使用简单、上手快,适合一两次文件传输或小批量复制。如果你经常同步大量文件、需要断点续传或做增量备份,建议使用 rsync(rsync over ssh)或 sftp。