- Add sftp_upload_debug_test.sh: detailed upload debugging script - Add sftp_test_result_report.md: complete test results - Verify: 1KB file upload/download successful, MD5 consistent - Issue: SSH_FXP_WRITE log missing, file attributes format abnormal - Status: SFTP core functionality working, small file transfer successful
102 lines
3.1 KiB
Bash
Executable File
102 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# SFTP 上传详细调试测试脚本
|
||
# 启用最大日志级别,检查 SSH_FXP_OPEN 和 SSH_FXP_WRITE 处理
|
||
|
||
echo "=== SFTP 上传详细调试测试 ==="
|
||
echo "测试目标:诊断 SSH_FXP_WRITE packet 未出现的原因"
|
||
echo ""
|
||
|
||
# 创建极小测试文件(1KB)
|
||
echo "创建测试文件(1KB)..."
|
||
dd if=/dev/urandom of=/tmp/sftp_debug_1kb.bin bs=1024 count=1 2>&1 | tail -1
|
||
ls -lh /tmp/sftp_debug_1kb.bin
|
||
|
||
echo ""
|
||
echo "=== 启用 SSH server 详细日志 ==="
|
||
echo "日志文件:/private/tmp/sftp_upload_debug.log"
|
||
|
||
# 重启 SSH server,启用 debug 级别日志
|
||
pkill -9 -f "markbase-core ssh-start"
|
||
sleep 2
|
||
|
||
RUST_LOG=debug /Users/accusys/markbase/target/release/markbase-core ssh-start > /private/tmp/sftp_upload_debug.log 2>&1 &
|
||
SSH_PID=$!
|
||
sleep 3
|
||
|
||
echo "SSH server 重启完成(PID: $SSH_PID)"
|
||
echo ""
|
||
|
||
echo "=== 测试 1: 基本连接测试 ==="
|
||
sshpass -p 'demo123' sftp -P 2024 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -v demo@127.0.0.1 <<EOF
|
||
pwd
|
||
bye
|
||
EOF
|
||
|
||
echo ""
|
||
echo "=== 测试 2: SFTP 上传测试(1KB 文件)==="
|
||
echo "使用 -v 参数启用详细日志..."
|
||
|
||
sshpass -p 'demo123' sftp -P 2024 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -v demo@127.0.0.1 <<EOF
|
||
put /tmp/sftp_debug_1kb.bin /tmp/sftp_upload_debug.bin
|
||
ls -la /tmp/
|
||
bye
|
||
EOF
|
||
|
||
echo ""
|
||
echo "=== 检查远程文件状态 ==="
|
||
sshpass -p 'demo123' sftp -P 2024 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null demo@127.0.0.1 <<EOF
|
||
ls -la /tmp/sftp_upload_debug.bin
|
||
stat /tmp/sftp_upload_debug.bin
|
||
bye
|
||
EOF
|
||
|
||
echo ""
|
||
echo "=== SSH server 日志分析 ==="
|
||
echo "查找 SSH_FXP_OPEN 和 SSH_FXP_WRITE..."
|
||
|
||
grep -E "SSH_FXP_OPEN|SSH_FXP_WRITE|SSH_FXP_HANDLE" /private/tmp/sftp_upload_debug.log | tail -30
|
||
|
||
echo ""
|
||
echo "=== 检查文件完整性 ==="
|
||
if [ -f "/tmp/sftp_upload_debug.bin" ]; then
|
||
echo "远程文件存在,检查大小..."
|
||
sshpass -p 'demo123' sftp -P 2024 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null demo@127.0.0.1 <<EOF
|
||
ls -la /tmp/sftp_upload_debug.bin
|
||
bye
|
||
EOF
|
||
|
||
# MD5 校验
|
||
echo ""
|
||
echo "源文件 MD5:"
|
||
md5 /tmp/sftp_debug_1kb.bin
|
||
|
||
echo "下载文件并校验..."
|
||
sshpass -p 'demo123' sftp -P 2024 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null demo@127.0.0.1 <<EOF
|
||
get /tmp/sftp_upload_debug.bin /tmp/sftp_download_debug.bin
|
||
bye
|
||
EOF
|
||
|
||
echo "下载文件 MD5:"
|
||
md5 /tmp/sftp_download_debug.bin
|
||
|
||
echo ""
|
||
echo "文件大小对比:"
|
||
ls -lh /tmp/sftp_debug_1kb.bin /tmp/sftp_upload_debug.bin /tmp/sftp_download_debug.bin 2>&1 | tail -5
|
||
else
|
||
echo "远程文件不存在 ❌"
|
||
fi
|
||
|
||
echo ""
|
||
echo "=== 详细日志分析 ==="
|
||
echo "查看完整的 SSH_FXP_OPEN 处理流程..."
|
||
|
||
grep -B 5 -A 20 "SSH_FXP_OPEN.*debug" /private/tmp/sftp_upload_debug.log | head -100
|
||
|
||
echo ""
|
||
echo "=== 清理测试文件 ==="
|
||
rm -f /tmp/sftp_debug_1kb.bin /tmp/sftp_upload_debug.bin /tmp/sftp_download_debug.bin
|
||
|
||
echo ""
|
||
echo "=== 测试完成 ==="
|
||
echo "日志文件位置:/private/tmp/sftp_upload_debug.log"
|
||
echo "请查看日志文件以诊断 SSH_FXP_WRITE 未出现的根本原因" |