Files
markbase/markbase-sftp-poc/src/server.rs
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

79 lines
2.2 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
use anyhow::Result;
use russh::server::{Server, Config};
use russh::*;
use russh_sftp::server::SftpServer;
use std::sync::Arc;
use tokio::net::TcpListener;
use log::{info, error};
use crate::auth::MockAuthDb;
use crate::shell_handler::ShellSession;
// MarkBase SSH服务器
pub struct MarkBaseSshServer {
auth_db: Arc<MockAuthDb>,
config: Arc<Config>,
}
impl MarkBaseSshServer {
pub fn new(auth_db: Arc<MockAuthDb>) -> Self {
// 创建服务器配置
let config = Config {
// 简化配置实际使用时需要生成host key
keys: vec![],
..Default::default()
};
Self {
auth_db,
config: Arc::new(config),
}
}
pub async fn run_server() -> Result<()> {
info!("Creating SSH server...");
// 1. 创建认证数据库
let auth_db = Arc::new(MockAuthDb::new());
// 2. 创建服务器实例
let server = MarkBaseSshServer::new(auth_db);
// 3. 监听2022端口避免与SFTPGo冲突
let listener = TcpListener::bind("0.0.0.0:2022").await?;
info!("SSH server listening on port 2022");
// 4. 接受连接
loop {
let (socket, addr) = listener.accept().await?;
info!("New connection from {}", addr);
// 5. 处理连接spawn异步任务
tokio::spawn(async move {
if let Err(e) = server.handle_connection(socket).await {
error!("Connection error: {}", e);
}
});
}
}
async fn handle_connection(&self, socket: tokio::net::TcpStream) -> Result<()> {
// SSH握手和处理
// 实际实现需要调用russh server API
// POC阶段简化Phase 2完整实现
info!("Connection handled (POC simplified)");
Ok(())
}
}
// russh Server trait实现
impl Server for MarkBaseSshServer {
type Handler = ShellSession;
fn new_client(&mut self, _peer_addr: Option<std::net::SocketAddr>) -> Self::Handler {
// 创建客户端handlershell + SFTP支持
ShellSession::new(self.auth_db.clone(), "unknown".to_string())
}
}