Debian SFTP自動化管理實現指南
在實現自動化管理前,需確保Debian系統上的SFTP服務已正確配置,為后續自動化操作提供基礎。
sudo apt-get update && sudo apt-get install openssh-server -y
sudo useradd -m -s /bin/false sftp_user # 創建用戶并禁止shell登錄
sudo passwd sftp_user # 設置強密碼
sudo mkdir -p /sftp/{upload,archive} # 創建上傳和歸檔目錄
sudo chown root:root /sftp # 根目錄所有者設為root(防止用戶越權)
sudo chmod 755 /sftp # 根目錄權限設為755(用戶僅能進入)
sudo chown sftp_user:sftp_user /sftp/upload # 上傳目錄所有者設為用戶
/etc/ssh/sshd_config,添加以下內容:Subsystem sftp internal-sftp
Match User sftp_user
ChrootDirectory /sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
重啟SSH服務使配置生效:sudo systemctl restart sshd
適用場景:快速實現基本的文件上傳/下載,無需復雜邏輯。
步驟:
sudo apt-get install sshpass -y
/usr/local/bin/sftp_upload.sh):#!/bin/bash
HOST="remote_host_ip"
USER="sftp_user"
PASSWORD="your_password"
LOCAL_DIR="/local/backup"
REMOTE_DIR="/sftp/upload"
# 上傳文件(使用sshpass傳遞密碼)
sshpass -p "$PASSWORD" sftp -o StrictHostKeyChecking=no "$USER@$HOST" <<EOF
cd $REMOTE_DIR
lcd $LOCAL_DIR
mput *
bye
EOF
sudo chmod +x /usr/local/bin/sftp_upload.sh
適用場景:需要更靈活的操作(如文件校驗、錯誤處理、加密傳輸),或希望避免密碼明文存儲。
步驟:
pip install paramiko
/usr/local/bin/sftp_automate.py):import paramiko
import os
from stat import S_ISDIR
def sftp_upload(host, port, username, password, local_dir, remote_dir):
try:
# 創建SSH客戶端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, port=port, username=username, password=password)
# 打開SFTP會話
sftp = ssh.open_sftp()
# 遍歷本地目錄,上傳文件
for item in os.listdir(local_dir):
local_path = os.path.join(local_dir, item)
remote_path = os.path.join(remote_dir, item)
if os.path.isfile(local_path):
sftp.put(local_path, remote_path)
print(f"Uploaded: {local_path} -> {remote_path}")
elif os.path.isdir(local_path):
try:
sftp.stat(remote_path)
except FileNotFoundError:
sftp.mkdir(remote_path)
sftp_upload(host, port, username, password, local_path, remote_path)
# 關閉連接
sftp.close()
ssh.close()
print("Upload completed successfully.")
except Exception as e:
print(f"Error: {str(e)}")
if __name__ == "__main__":
# 配置參數
HOST = "remote_host_ip"
PORT = 22
USERNAME = "sftp_user"
PASSWORD = "your_password"
LOCAL_DIR = "/local/backup"
REMOTE_DIR = "/sftp/upload"
# 執行上傳
sftp_upload(HOST, PORT, USERNAME, PASSWORD, LOCAL_DIR, REMOTE_DIR)
適用場景:需要兼容舊系統或處理復雜的交互式流程。
步驟:
sudo apt-get install expect -y
/usr/local/bin/sftp_expect.sh):#!/usr/bin/expect -f
set timeout 30
set host [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set remote_dir [lindex $argv 3]
set local_dir [lindex $argv 4]
# 啟動SFTP會話
spawn sftp $user@$host
expect "password:"
send "$password\r"
expect "sftp>"
# 執行SFTP命令
send "cd $remote_dir\r"
expect "sftp>"
send "lcd $local_dir\r"
expect "sftp>"
send "mput *\r"
expect "sftp>"
send "bye\r"
expect eof
sudo chmod +x /usr/local/bin/sftp_expect.sh
無論使用哪種腳本方式,都可以通過Cron設置定時任務,實現定期自動執行。
步驟:
crontab -e
0 2 * * * /usr/local/bin/sftp_upload.sh >> /var/log/sftp_upload.log 2>&1
或Python腳本:0 2 * * * /usr/bin/python3 /usr/local/bin/sftp_automate.py >> /var/log/sftp_automate.log 2>&1
0 2 * * *表示每天凌晨2點執行;>> /var/log/sftp_upload.log 2>&1將腳本輸出(包括錯誤信息)追加到日志文件,便于后續排查問題。ssh-keygen -t rsa -b 4096
ssh-copy-id -i ~/.ssh/id_rsa.pub sftp_user@remote_host_ip
sshpass -p "$PASSWORD"行,Python腳本中使用key_filename參數指定私鑰路徑)。sudo chown root:root /usr/local/bin/sftp_upload.sh
sudo chmod 700 /usr/local/bin/sftp_upload.sh
/var/log/sftp_upload.log),確認自動化任務執行情況,及時發現異常。通過以上步驟,可實現Debian SFTP的全面自動化管理,涵蓋服務配置、腳本編寫、定時調度及安全增強,滿足企業級文件傳輸需求。