在 Linux 下用脚本操作 SFTP,常见有三种方式,按“推荐程度”给你说明,并附带可直接用的示例。
sftp + 批处理文件(最常用)sftp 本身支持 非交互模式,通过 -b 指定批处理脚本。
例如:sftp_cmds.txt
cd /remote/upload
put /local/file1.txt
put /local/file2.log
get /remote/data.csv /local/data.csv
bye
sftp -b sftp_cmds.txt user@host
sftp -i ~/.ssh/id_rsa -b sftp_cmds.txt user@host
✅ 优点
如果必须用密码,可以用 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
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
✅ 优点
#!/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 不执行 | 用绝对路径 |
如果你愿意,可以告诉我:
我可以直接帮你写一整套可用脚本。