1. 精华:选择SCP做快速一对一拷贝,简单直接但缺乏断点续传与增量能力。
2. 精华:选择SFTP做交互式管理或批量脚本(batch)上传,适合需要远程文件浏览场景。
3. 精华:选择rsync做高效增量同步、压缩与权限保留,跨跳板时建议配合SSH代理。
本文由有多年企业级运维实战经验的作者撰写,覆盖命令示例、跳板(bastion/跳板机)穿透技巧、常见错误排查及安全建议,符合Google EEAT准则,确保可验证、可靠、实操性强。
一、准备工作:身份与密钥。生产环境请务必使用密钥认证(SSH key),在本地生成密钥并把公钥放到跳板与目标主机的~/.ssh/authorized_keys,设置合适权限:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys。
二、直接把文件上传到跳板:SCP示例。最直接的方式是使用SCP:
scp -P 22 ./localfile user@bastion:/home/user/
当跳板就是目标主机时,这条命令最简单快捷。但若需通过跳板到内网目标机,需要跳板转发或ProxyJump。
三、通过跳板把文件传到内网主机:三种常用模式对比。模式A:本地->跳板->内网(两次scp);模式B:scp -3或ProxyJump(推荐);模式C:通过rsync -e 'ssh -J'做高效同步。
模式A示例(两步):
scp ./file user@bastion:/tmp/
ssh user@bastion 'scp /tmp/file user2@internal:/opt/data/'
这种方式直观,但容易留下临时文件、慢且人工步骤多,不适合自动化。
模式B示例(ProxyJump,一条命令穿透):
scp -o ProxyJump=user@bastion ./localfile user2@internal:/opt/data/
或使用SSH简写配置~/.ssh/config,便于脚本化与批量操作。
四、SFTP:交互与批处理。适合交互式上传和远程管理:
sftp -o ProxyJump=user@bastion user2@internal
在sftp交互下使用put/get;批量脚本可以把命令写入batchfile然后执行:sftp -b batchfile user@host。
五、rsync:最推荐用于大文件与增量同步的利器。支持压缩、断点续传、权限保留与删除选项。
常用命令:
rsync -avz -e "ssh -J user@bastion" ./localdir/ user2@internal:/opt/data/
说明:-a 保留属性,-v 详细,-z 压缩。rsync 必须考虑源路径末尾斜杠带来的行为差异(有斜杠同步目录内容,无斜杠同步目录本身)。
六、性能与带宽控制。大文件传输建议加上--progress查看进度;用--bwlimit=KBPS限制带宽。对于高延迟链路,开启压缩(-z)对小文件有帮助,但CPU受限时需衡量。
七、安全加固建议(必须做):禁用密码登录,只允许密钥;在跳板配置命令白名单或强制使用ProxyCommand;使用MFA或堡垒机日志(审计)。同时在SSH服务端开启PermitRootLogin no和AllowUsers策略。
八、错误排查与常见坑:
1) Permission denied:检查authorized_keys、~/.ssh权限及SELinux;2) ssh: connect to host port 22: Connection refused:确认跳板/目标主机防火墙与ssh服务;3) rsync权限问题:用--rsync-path='sudo rsync'或调整目标权限。
九、实践技巧(提高效率与可靠性):
- 使用~/.ssh/config配置Host、ProxyJump、IdentityFile,实现一键命令;
- 通过scp/rsync的--partial与--append选项实现断点续传;
- 在CI/自动化中避免明文密码,使用密钥与短期临时密钥;
- 对大规模主机使用并发工具(pssh、pdsh、Ansible)结合rsync分发。
十、对比总结(一句话):SCP适合简单拷贝、SFTP适合交互管理、rsync适合高效增量同步与持续分发;跨跳板优先用ProxyJump或SSH代理实现透明穿透。
附:常用SSH配置示例(放在~/.ssh/config)便于运维:
Host bastion HostName bastion.example.com User user IdentityFile ~/.ssh/id_rsa_bastion
Host internal HostName internal.private User user2 ProxyJump bastion IdentityFile ~/.ssh/id_rsa_internal
写在最后:运维的世界没有万能钥匙,但掌握SCP/SFTP/rsync这“三板斧”并配合安全策略与自动化脚本,就能把文件稳、快、安全地送到任何一个跳板机背后的内网主机上。若你需要,我可以根据你的网络拓扑和权限模型,定制最适合的脚本与SSH配置示例。