scp使用

scp命令是基于 SSH 协议的远程文件复制命令,Linux系统和Windows系统都支持此命令,支持跨平台文件传输(Linux/macOS/Windows)通用。

安装命令

正常的发行版本都会自带此命令,如果没有,可以使用以下命令安装,linux 系统下安装:

1
2
sudo apt-get install openssh-server

mac和windows10以上都预装,如果没有可以通过安装git bash来解决。

基本用法

  • 从本地复制文件到远程主机:
    1
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music
  • 从远程主机复制文件到本地:
    1
    scp root@www.runoob.com:/home/root/others/music/1.mp3 /home/space/music/
  • 复制整个目录(递归):
    1
    2
    scp -rpCv mydir/ user@remote:/home/user/
    # -r 递归 -p 保留属性 -C 压缩 -v 显示详情

常用选项

选项 说明
-1 强制使用 SSH 协议版本 1(已过时,不推荐使用)
-2 强制使用 SSH 协议版本 2(默认,推荐)
-4 只使用 IPv4 地址
-6 只使用 IPv6 地址
-B 批处理模式,不提示密码输入(适合脚本使用,需配合密钥登录)
-C 启用压缩,提高传输效率(适用于慢速连接)
-p 保留文件的修改时间、访问时间和权限信息
-q 静默模式,不显示进度信息
-r 递归复制目录及其内容
-v 显示详细过程(调试连接用)
-c cipher 指定加密算法(如 aes128-ctr),传给 ssh
-F ssh_config 指定 SSH 配置文件
-i identity_file 指定私钥文件,进行密钥验证
-l limit 限制带宽(单位为 Kbit/s),如:-l 800 表示限速 100 KB/s
-o ssh_option 传递 SSH 配置选项,如 -o StrictHostKeyChecking=no
-P port 指定远程主机端口(注意是大写的 P)
-S program 指定用于加密的外部程序,需支持 SSH 选项(高级用法)

示例:
1、指定端口进行连接:

1
scp -P 2222 file.txt user@remote:/home/user/

2、限速传输大文件(主要防止流量影响生产)

1
scp -l 5000 bigfile.iso user@remote:/data/

3、排除特定文件(需结合SSH管道)

1
2
# 传输log目录但排除*.tmp文件
tar czf - logs/ --exclude='*.tmp' | ssh user@remote "tar xzf - -C /archive"

4、代理跳转传输(通过堡垒机)

1
2
# 通过跳板机传输到内网服务器
scp -o ProxyJump=jumper@bastion:22 config.yaml app@internal-server:/etc/app/

常见问题

1、确保当前用户拥有远程主机的登录权限,否则会提示权限不足。
2、远程拷贝的文件需要有读权限,否则会提示权限不足。