温馨提示×

怎样自动化linux sftp

小樊
43
2026-10-05 00:12:01
栏目: 智能运维

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


一、最推荐:使用 sftp + 批处理脚本(官方方式)

sftp 本身支持批处理模式,适合简单自动化。

1. 配置 SSH 免密登录(关键)

ssh-keygen -t rsa
ssh-copy-id user@remote_host

2. 编写 SFTP 批处理文件

# sftp_batch.txt
cd /remote/path
lcd /local/path
put file.txt
get report.csv
bye

3. 执行

sftp -b sftp_batch.txt user@remote_host

✅ 优点

  • 原生支持
  • 不需要额外工具

❌ 缺点

  • 不适合复杂逻辑

二、更灵活:使用 lftp(强烈推荐)

lftp 对 SFTP 支持非常好,适合自动化和同步。

安装

yum install lftp   # CentOS
apt install lftp   # Ubuntu

示例:自动上传

lftp sftp://user:password@host <<EOF
cd /remote/path
lcd /local/path
put file.txt
bye
EOF

示例:镜像同步

lftp -e "mirror -R /local/path /remote/path; bye" \
sftp://user@host

✅ 优点

  • 支持 mirror、断点续传
  • 脚本化极强

三、高级同步:使用 rsync over SSH(不是纯 SFTP)

如果对方只是 SSH,不是严格 SFTP:

rsync -avz -e ssh /local/path user@host:/remote/path

✅ 优点

  • 增量同步
  • 企业最常用

❌ 限制

  • 需要 SSH 权限,不是 SFTP 协议

四、程序化自动化(开发场景)

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 * * * /usr/bin/lftp -f /scripts/sftp_auto.lftp

六、安全建议(重要)

  • ✅ 使用 SSH Key
  • ❌ 避免在脚本中明文写密码
  • ✅ 使用 .ssh/config
  • ✅ 限制 SFTP 用户 chroot

七、方案选择建议

场景 推荐
简单上传下载 sftp -b
自动同步 lftp
系统备份 rsync
开发集成 Python

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

  • 是 上传还是下载
  • 是否 必须走 SFTP 协议
  • 是否 已有 SSH Key

我可以直接帮你写一套可运行脚本。

0 踩