scp(Secure Copy)是基于 SSH 协议的文件传输工具,可在本地与远程主机之间安全地复制文件 / 目录,特点是加密传输、用法简单。
# 本地 -> 远程
scp [选项] 本地路径 用户名@远程IP:远程路径
# 远程 -> 本地
scp [选项] 用户名@远程IP:远程路径 本地路径# 把本地的 demo.txt 传到远程服务器的 /home/user/docs 目录下
scp /home/local/demo.txt user@192.168.1.100:/home/user/docs/# 把远程服务器的 report.pdf 下载到本地的 ~/downloads 目录
scp user@192.168.1.100:/var/reports/report.pdf ~/downloads/-r 选项,递归复制)# 本地目录 → 远程
scp -r /home/local/project user@192.168.1.100:/home/user/workspace/
# 远程目录 → 本地
scp -r user@192.168.1.100:/var/logs ~/backup/logs/# 远程服务器 SSH 端口为 666 时
scp -P 666 /local/file.txt user@192.168.1.100:/remote/path/-p 选项,保留权限、修改时间等)scp -p /data/config.ini user@192.168.1.100:/etc/config/通过 SSH 密钥登录实现 scp 免密,无需每次输入密码。
1. 本地生成密钥对(一路回车默认即可):
ssh-keygen -t rsa
生成的密钥在 ~/.ssh/ 目录(id_rsa 私钥,id_rsa.pub 公钥)
2. 上传公钥到远程服务器:
ssh-copy-id user@192.168.1.100
首次执行需输入远程密码,后续 scp 无需密码。
# 从本地复制文件到远程
sshpass -p "你的密码" scp /本地文件路径 用户名@远程IP:/远程目标路径
# 从远程复制文件到本地
sshpass -p "你的密码" scp 用户名@远程IP:/远程文件路径 /本地目标路径
# 复制目录(加 -r 参数)
sshpass -p "你的密码" scp -r /本地目录 用户名@远程IP:/远程目录Permission denied:检查远程路径权限或用户名密码是否正确。No such file or directory:确认本地 / 远程路径是否存在(注意路径拼写)。