温馨提示×

怎样用脚本操作linux sftp

小樊
48
2026-10-16 16:53:47
栏目: 智能运维

在 Linux 下用脚本操作 SFTP,常见有三种方式,按“推荐程度”给你说明,并附带可直接用的示例。


一、推荐方式:sftp + 批处理文件(最常用)

sftp 本身支持 非交互模式,通过 -b 指定批处理脚本。

1️⃣ 编写 sftp 批处理脚本

例如:sftp_cmds.txt

cd /remote/upload
put /local/file1.txt
put /local/file2.log
get /remote/data.csv /local/data.csv
bye

2️⃣ 执行脚本

sftp -b sftp_cmds.txt user@host

3️⃣ 如果用密钥登录(推荐)

sftp -i ~/.ssh/id_rsa -b sftp_cmds.txt user@host

✅ 优点

  • 官方支持
  • 稳定、简单
  • 适合定时任务(cron)

二、自动输入密码(不推荐,但有时没办法)

如果必须用密码,可以用 sshpass

安装

yum install sshpass     # CentOS
apt install sshpass     # Ubuntu

示例

sshpass -p 'password' sftp -b sftp_cmds.txt user@host

⚠️ 风险

  • 密码明文
  • 不安全
  • 仅限内网/测试

三、更现代方式:用 lftp(功能最强)

安装

yum install lftp
apt install lftp

脚本示例(sftp 协议)

lftp sftp://user:password@host <<EOF
cd /remote/upload
put /local/file.txt
mget *.csv
bye
EOF

使用密钥

lftp -e "put file.txt; bye" sftp://user@host -i ~/.ssh/id_rsa

✅ 优点

  • 支持断点续传
  • 支持通配符
  • 脚本能力更强

四、Shell 脚本完整示例

#!/bin/bash

HOST=user@192.168.1.10
KEY=~/.ssh/id_rsa
CMD_FILE=/tmp/sftp_cmd.txt

cat > $CMD_FILE <<EOF
cd /upload
put /data/a.txt
bye
EOF

sftp -i $KEY -b $CMD_FILE $HOST

五、常见坑提醒

问题 说明
权限拒绝 检查远程目录权限
无法连接 检查 ssh 端口、防火墙
中文乱码 尽量用 UTF-8
cron 不执行 用绝对路径

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

  • ✅ 是 上传还是下载
  • ✅ 是否 定时任务
  • ✅ 是否 必须密码

我可以直接帮你写一整套可用脚本。

0 踩