---
# System prepended metadata

title: NAS 傳送檔案至接收方的 SFTP 腳本教學
tags: [share]

---


# 📤 NAS 傳送檔案至接收方的 SFTP 腳本教學

---

## 📄 範例腳本：`sftp_upload.sh`

```bash
#!/bin/bash

# === 設定參數 ===
REMOTE_USER="username"                         # 接收方的帳號
REMOTE_HOST="sftp.example.com"                # 接收方的主機 IP 或網域
REMOTE_PORT=22                                # SFTP 連接埠（預設為 22）
REMOTE_PATH="/remote/folder/"                 # 接收方的儲存路徑
LOCAL_FILE="/volume1/shared/file_to_send.txt" # NAS 上要傳送的檔案路徑
LOG_FILE="/volume1/shared/sftp_upload.log"    # 日誌檔案（可選）

# === 傳送檔案 ===
echo "[$(date)] 傳送開始..." >> "$LOG_FILE"

sftp -oPort=$REMOTE_PORT $REMOTE_USER@$REMOTE_HOST <<EOF >> "$LOG_FILE" 2>&1
put $LOCAL_FILE $REMOTE_PATH
exit
EOF

if [ $? -eq 0 ]; then
    echo "[$(date)] ✅ 傳送成功：$LOCAL_FILE -> $REMOTE_HOST:$REMOTE_PATH" >> "$LOG_FILE"
else
    echo "[$(date)] ❌ 傳送失敗，請檢查設定。" >> "$LOG_FILE"
fi
```

---

## ✅ 使用方式

1. 開啟 Synology DSM 的 `控制台 → 排程任務`，新增一個「**排程的 Script 任務**」。
2. 將上述內容直接貼入「執行命令」欄位，或另存為 `.sh` 檔並呼叫：

   ```bash
   sh /volume1/shared/sftp_upload.sh
   ```

3. 可透過日誌檔 `sftp_upload.log` 檢查是否傳送成功。

---

## 🔐 若使用 SSH 金鑰登入

1. 在 NAS 上建立金鑰對：

   ```bash
   ssh-keygen
   ```

2. 將公鑰 `~/.ssh/id_rsa.pub` 提供給接收方，請他加入至主機的：

   ```
   ~/.ssh/authorized_keys
   ```

3. 若要在腳本中使用金鑰，請修改 SFTP 指令如下：

   ```bash
   sftp -i ~/.ssh/id_rsa -oPort=$REMOTE_PORT $REMOTE_USER@$REMOTE_HOST <<EOF
   put $LOCAL_FILE $REMOTE_PATH
   exit
   EOF
   ```

---

## 📌 建議

- 建議將 `id_rsa` 權限設定為 `600`，避免連線問題：

  ```bash
  chmod 600 ~/.ssh/id_rsa
  ```

- 腳本可搭配「排程任務」自動執行，例如每日定時備份。

---

## 🛠️ 客製化支援

如你提供以下資訊，我可以幫你產生對應的腳本：

- NAS 上檔案的實際路徑  
- 接收方主機名稱或 IP  
- 接收方 SFTP 帳號  
- 是否使用金鑰認證或密碼  
- 接收方指定儲存路徑  

---
