在 CentOS 上实现 SFTP 自动上传,常见有几种方式,下面按最常用、最稳妥的顺序给你说明,并附示例。
sftp + 批处理脚本(最简单)需要
sshpass
yum install -y sshpass
vim sftp_upload.sh
#!/bin/bash
HOST=192.168.1.100
USER=sftpuser
PASS=yourpassword
LOCAL=/data/test.txt
REMOTE=/upload/test.txt
sshpass -p "$PASS" sftp -o StrictHostKeyChecking=no $USER@$HOST <<EOF
put $LOCAL $REMOTE
bye
EOF
chmod +x sftp_upload.sh
./sftp_upload.sh
✅ 适合:临时脚本、内网环境
ssh-keygen -t rsa
ssh-copy-id sftpuser@192.168.1.100
vim sftp_auto.sh
#!/bin/bash
sftp sftpuser@192.168.1.100 <<EOF
cd /upload
put /data/test.txt
bye
EOF
chmod +x sftp_auto.sh
✅ 不需要密码
✅ 安全、稳定
✅ 可用于 cron
crontab 定时自动上传crontab -e
每天凌晨 2 点上传:
0 2 * * * /root/sftp_auto.sh >> /var/log/sftp.log 2>&1
lftp(更强大,支持断点)yum install -y lftp
lftp sftp://user:pass@host <<EOF
put /data/test.txt -o /upload/test.txt
bye
EOF
或密钥方式:
lftp sftp://user@host -e "put file; bye"
确保脚本使用 sftp,不是 scp
setenforce 0 # 测试用
| 场景 | 推荐方式 |
|---|---|
| 安全稳定 | SSH 密钥 + sftp |
| 定时任务 | sftp + crontab |
| 大文件 | lftp |
| 临时使用 | sshpass |
如果你愿意,可以告诉我:
我可以帮你写完整可直接用的脚本。