温馨提示×

怎样自动化linux sftp任务

小樊
37
2026-10-07 22:28:26
栏目: 智能运维

在 Linux 下自动化 SFTP 任务,常见且可靠的做法有几种,下面按推荐程度和使用场景说明。


一、推荐方案:sftp + 批处理脚本(最常用)

1️⃣ 使用 sftp -b 批处理模式

sftp 支持 -b 参数执行命令文件,无需交互。

示例

# 1. 编写 sftp 命令文件
cat > sftp_cmds.txt <<EOF
cd /remote/upload
put localfile.txt
get remotefile.txt
bye
EOF

# 2. 执行
sftp -b sftp_cmds.txt user@host

✅ 适合:

  • 定时任务(cron)
  • 简单上传/下载

二、结合 SSH 密钥(必须做)

否则每次都要输密码,无法自动化。

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

验证:

sftp user@host

三、使用 lftp(更强大,推荐进阶)

lftp 支持 SFTP、脚本、断点续传。

安装

yum install lftp     # CentOS
apt install lftp     # Ubuntu

示例脚本

lftp sftp://user@host <<EOF
cd /remote
put file.txt
mget *.log
bye
EOF

✅ 优点:

  • 支持通配符
  • 更稳定
  • 可镜像目录

四、使用 expect(不推荐但可用)

适合无法使用密钥的 legacy 系统。

#!/usr/bin/expect
spawn sftp user@host
expect "password:"
send "yourpassword\r"
expect "sftp>"
send "put file.txt\r"
expect "sftp>"
send "bye\r"

⚠️ 缺点:

  • 密码明文
  • 不安全

五、用 rsync over SSH(如果你能控制协议)

虽然不是 SFTP,但常是最佳替代:

rsync -avz -e ssh file user@host:/path/

六、定时自动化(cron)

crontab -e

示例(每天 2 点):

0 2 * * * /home/user/sftp_upload.sh

七、完整自动化示例(推荐结构)

#!/bin/bash
HOST=user@host
LOCAL=/data/file.txt
REMOTE=/upload/

sftp -b - $HOST <<EOF
put $LOCAL $REMOTE
bye
EOF

选型建议

场景 推荐
简单上传下载 sftp -b
复杂/批量 lftp
无密钥环境 expect(临时)
可改协议 rsync

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

  • SFTP 是 上传还是下载
  • 是否 必须用密码
  • 是否 Windows ↔ Linux

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

0 踩