可以的,Linux 下的 SFTP 完全可以自动化,常见做法有几种,按“推荐程度 + 场景”给你梳理一下:
sftp + 批处理模式(非交互)sftp 本身支持 批处理脚本,不需要人工输入命令。
sftp -b batch.txt user@host
batch.txt 内容:
cd /remote/path
put localfile.txt
get remotefile.txt
bye
✅ 优点
❌ 缺点
配合上面方式,实现完全无人值守:
ssh-keygen -t rsa
ssh-copy-id user@host
然后:
crontab -e
0 2 * * * sftp -b /path/batch.txt user@host
✅ 完全自动化
✅ 安全(无明文密码)
lftp(功能更强)lftp 支持 SFTP,且脚本能力更强。
lftp sftp://user@host -e "put file.txt; bye"
或脚本:
lftp -f script.lftp
✅ 支持镜像、断点续传
✅ 更适合复杂任务
expect(不推荐但可用)当你必须用密码登录时:
expect -c '
spawn sftp user@host
expect "password:"
send "yourpassword\r"
interact
'
⚠ 不安全(密码明文)
⚠ 维护麻烦
paramiko / pysftpsshpass(不推荐)| 场景 | 推荐方案 |
|---|---|
| 简单定时上传 | sftp -b + 密钥 |
| 复杂同步 | lftp |
| 必须用密码 | expect(临时用) |
| 开发集成 | Python |
如果你愿意,可以告诉我:
我可以直接帮你写一套可用脚本。