在 Linux 下“自动化 SFTP”通常指无需人工交互地完成 SFTP 上传/下载。下面按推荐程度和使用场景介绍几种主流方案。
sftp + 批处理(简单安全)-b 批处理模式sftp 本身支持非交互执行命令。
sftp -oBatchMode=no user@host <<EOF
put localfile.txt /remote/path/
get /remote/path/remote.txt .
bye
EOF
或写成脚本文件:
sftp -b sftp_cmd.txt user@host
sftp_cmd.txt:
put file.txt /upload/
ls /upload/
bye
✅ 优点
ssh-keygen -t rsa -b 4096
ssh-copy-id user@host
然后:
sftp -oBatchMode=yes user@host <<EOF
put data.txt /incoming/
bye
EOF
✅ 完全非交互
✅ 适合 cron / 系统服务
lftp(功能最强)lftp sftp://user@host -e "
put local.txt -o /remote/local.txt;
get /remote/file.txt;
bye
"
或使用密钥:
lftp -u user, sftp://host <<EOF
set sftp:auto-confirm yes
put file.txt
bye
EOF
✅ 支持断点续传
✅ 支持 mirror(目录同步)
✅ 脚本化极强
import paramiko
transport = paramiko.Transport(("host", 22))
transport.connect(username="user", password="pass")
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put("local.txt", "/remote/local.txt")
sftp.close()
✅ 适合复杂逻辑
✅ 可集成业务系统
crontab -e
0 2 * * * /opt/scripts/sftp_upload.sh
✅ 优先使用 SSH 密钥
❌ 不要在脚本中明文写密码
✅ 使用受限 SFTP 用户(chroot)
✅ 防火墙限制 IP
| 场景 | 推荐 |
|---|---|
| 简单脚本 | sftp -b |
| 定时任务 | sftp + 密钥 |
| 目录同步 | lftp |
| 业务系统 | Python |
如果你愿意,可以告诉我:
我可以给你一份可直接用的脚本。