温馨提示×

如何自动化linux sftp

小樊
35
2026-09-26 05:38:15
栏目: 智能运维

在 Linux 下“自动化 SFTP”通常指无需人工交互地完成 SFTP 上传/下载。下面按推荐程度和使用场景介绍几种主流方案。


一、最推荐:使用 sftp + 批处理(简单安全)

1️⃣ 使用 -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 密钥 + sftp

2️⃣ 配置 SSH 密钥登录(强烈推荐)

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(功能最强)

3️⃣ lftp 自动 SFTP

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(目录同步)
✅ 脚本化极强


四、脚本语言自动化(高级)

4️⃣ Python(paramiko)

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()

✅ 适合复杂逻辑
✅ 可集成业务系统


五、定时自动执行(cron)

crontab -e
0 2 * * * /opt/scripts/sftp_upload.sh

六、安全建议(非常重要)

✅ 优先使用 SSH 密钥
❌ 不要在脚本中明文写密码
✅ 使用受限 SFTP 用户(chroot)
✅ 防火墙限制 IP


七、方案选择建议

场景 推荐
简单脚本 sftp -b
定时任务 sftp + 密钥
目录同步 lftp
业务系统 Python

如果你愿意,可以告诉我:

  • 是否需要 密码登录
  • 是否 定时执行
  • 是否 Windows ↔ Linux

我可以给你一份可直接用的脚本。

0 踩