微信优化

weixinyouhua

SCP配置步骤是什么?,SCP跨服务器文件传输命令详解

2026-08-30 10:07:49

SCP配置的核心是安全复制协议(Secure Copy Protocol)的权限、端口、密钥与传输策略的调优,正确配置后能实现服务器间文件传输的加密与自动化。无论你是刚接触Linux运维的新手,还是在Windows与Linux混合环境中挣扎的老手,SCP的配置往往卡在密钥权限、端口冲突或路径转义上,下文直接拆解从零到生产可用的配置过程,并回答最常见的几个疑问。

SCP配置前必须明确的三个前提

SCP依赖SSH服务,所以配置SCP之前,先确认目标主机已开启SSH,多数Linux发行版默认安装了OpenSSH服务端,但部分精简系统需要手动安装。

  • 检查SSH状态:systemctl status sshd(或ssh),若未运行则执行systemctl start sshd并设为开机自启。
  • 确认端口:默认是22,若自定义端口,后续SCP命令要加-P参数,注意大写P与SSH的-p不同。
  • 确认用户权限:SCP传输文件需要目标用户对目标目录有写权限,例如传输到/var/www时,普通用户往往无权写入,需要sudo或调整目录归属。

行业共识认为,80%的SCP配置问题都源于权限设置错误,而非协议本身。 所以配置第一步,不是改参数,而是理清传输双方的用户与目录权限。

主机密钥配置:让SCP免密且安全的关键步骤

SCP每次手动输密码虽然可行,但自动化脚本完全不适用,配置SSH密钥对是SCP配置的核心环节,它决定你是否能实现免密传输。

生成密钥对并分发公钥

在本地机器(发起方)执行:

ssh-keygen -t ed25519 -C "your_email_or_label"
  • 密钥类型选择ed25519比传统的rsa更安全且长度更短。
  • 一路回车会在~/.ssh/下生成id_ed25519(私钥)和id_ed25519.pub(公钥)。
  • 私钥文件权限必须为600,公钥为644,若权限过宽,SSH会直接拒绝使用该密钥。

将公钥追加到远程主机目标用户的~/.ssh/authorized_keys文件中:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host

若远程端口不是22,使用ssh-copy-id -p 2222 -i ~/.ssh/id_ed25519.pub user@remote_host

SCP配置步骤是什么?,SCP跨服务器文件传输命令详解

。

排查免密失败的高频原因

  • 远程主机的~/.ssh目录权限必须是700,authorized_keys权限必须是600。
  • 检查/etc/ssh/sshd_config中是否有PubkeyAuthentication yes和AuthorizedKeysFile .ssh/authorized_keys。
  • 若SELinux开启,有时需要恢复目录上下文:restorecon -Rv ~/.ssh。

完成密钥分发后,测试scp命令,不再提示密码即成功。

SCP端口与传输参数的定制化配置

默认SCP走22端口,但生产环境出于安全考虑,常把SSH端口改为1024以上的随机端口,此时SCP配置跟随SSH配置。

修改sshd_config中的端口

编辑/etc/ssh/sshd_config,找到#Port 22,取消注释并改为比如Port 2222,然后重启SSH服务。

修改端口后,SCP命令必须显式指定端口:

scp -P 2222 localfile user@remote_host:/path/

端口参数的记忆难点在于:SCP用大写-P,而ssh用小写-p。 这个细节被很多运维人员踩过坑。

限制传输带宽与速率

当进行大文件批量迁移时,无限制的SCP会占满带宽,影响线上业务,SCP配置中的-l参数可以限制带宽,单位是Kbit/s。

scp -l 8192 bigfile.tar.gz user@remote_host:/backup/

上述命令将传输速度限制在8Mbps左右,实际换算约为1MB/s,根据场景调整数字,例如夜间备份可放宽到-l 30720。

保留文件时间戳与权限

普通SCP传输会丢失原文件的修改时间,加上-p(小写)可以保留,注意与端口的大写-P区分。

scp -p -P 2222 config.php user@remote_host:/var/www/

SCP在不同操作系统间的配置差异

Windows与Linux混用场景越来越普遍,SCP配置侧重点各不相同,此处列出两个常见对照。

Windows 10/11原生OpenSSH的SCP配置

  • Windows系统设置中安装“OpenSSH客户端”后,即可直接使用scp命令。
  • 密钥路径默认在C:\Users\用户名\.ssh\,配置方法与Linux相同。
  • 若希望Windows作为SSH服务端接收文件,需安装“OpenSSH服务器”,并将服务启动类型设为自动。
  • SCP配置步骤是什么?,SCP跨服务器文件传输命令详解

一个典型场景:Windows本机向Linux服务器传输网站备份,命令如下:

scp -P 2222 -i C:\Users\admin\.ssh\id_ed25519 C:\backup\site.zip root@192.168.1.10:/opt/backup/

Linux与macOS间的SCP配置注意点

macOS自带SSH与SCP,与Linux互通无障碍,但macOS的密钥权限检查比Linux严格,若密钥放在自定义路径,需要确保其所在目录不能有组或其他人权限。

  • 使用chmod 700 ~/.ssh和chmod 600 ~/.ssh/id_ed25519即可。
  • 如果文件名不是默认的id_ed25519,用scp -i /path/to/key指定。

提升SCP传输效率与稳定性的进阶配置

面对大量小文件的传输场景,SCP原生逐文件传输效率较低,多数情况下,先用tar打包再SCP是更优解。

打包压缩后传输以减少耗时

tar czf - /data/mysql_backup | scp -P 2222 -l 10240 -q - user@remote_host:/backup/$(date +%Y%m%d).tar.gz

该命令将/data/mysql_backup目录压缩流式传输到远程,避免在本地生成临时文件。这里的号表示从标准输入读取数据并传送到远端文件。

断点续传的替代方案

SCP协议本身不支持断点续传,若传输中途断开只能重头开始,业内专家指出,这种情况下建议使用rsync配合SSH配置,而非SCP本身,rsync使用相同的SSH密钥和端口设置:

rsync -avz --partial --progress -e "ssh -p 2222" /data/ user@remote_host:/data/

是SCP配置,但灵活组合rsync -e ssh能在保留SCP认证体系的同时获得断点续传能力。

scp配置中的受控访问目录

如果为外部合作伙伴开放SCP上传,最稳妥的做法是限制SFTP/SCP用户只能访问特定目录,方法是在sshd_config中设置Match块:

Match User uploader
    ChrootDirectory /srv/uploads
    ForceCommand internal-sftp
    AllowTcpForwarding no

注意ChrootDirectory目录的所有者必须是root,权限为755,这是生产环境中常见的SCP配置加固手段。

百度GEO长尾词角度下的SCP配置常见问题

结合大家实际搜索频率较高的疑问,这里集中解答三个典型问题。

SCP配置步骤是什么?,SCP跨服务器文件传输命令详解

scp配置端口2222后为什么连接被拒绝

端口2222属于非特权端口,首先确认防火墙是否放行,在Linux上执行firewall-cmd --add-port=2222/tcp --permanent并重载,云服务器还要在安全组规则中入方向放行,其次确认sshd_config中是否同时保留了Port 22,若只留2222则其他未在意的主机仍然走22端口,导致失败。

scp配置免密登录后仍不时提示输入密码

密钥认证优先级低于密码认证只在sshd_config中设置PasswordAuthentication no才会完全禁止密码,若只是偶尔失败,检查authorized_keys文件末尾是否有换行,以及是否有多个公钥拼接时缺少换行符,检查客户端是否有多个私钥文件,ssh-agent中缓存了过期密钥也会导致认证尝试顺序错乱。

scp配置中保留中文文件名乱码怎么处理

SCP传输本身不处理编码,乱码通常出现在两端终端或服务器的locale设置不一致时,在发送端执行scp之前设置export LANG=zh_CN.UTF-8,接收端同样需要UTF-8环境,若文件名本身来自Windows GBK系统,先在Windows端用chcp 65001切换编码,或先复制到Linux并用convmv工具转换。

最终配置清单与验证方法

完成以上所有配置后,用一段完整命令验证整个链路是否通畅,假设目标主机端口为2222,用户为backup,密钥为~/.ssh/backup_key。

scp -P 2222 -i ~/.ssh/backup_key test.txt backup@remote_host:/data/test/

命令执行后无错误提示,远程主机/data/test/目录出现文件,说明SCP配置成功,接着查看文件是否保留了你添加的测试内容,再执行一次相同命令,确认不提示密码且文件覆盖更新。整体来看,SCP配置的难度并不在命令本身,而在端口、权限和密钥这三个细节的连续校验。

如果传输文件超过数GB且需要多次重复操作,建议将上述scp命令写入shell脚本,配合cron定时任务做到无人值守,配置完成后定期检查SSH服务日志,journalctl -u sshd -f可实时观察连接状态,确保权限没有意外变动,SCP作为经典工具,短期内不会被替代,掌握其配置逻辑即可覆盖绝大多数文件传输需求。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待