From b384154d734cacc89405072a295d61366b2d5778 Mon Sep 17 00:00:00 2001 From: RafayAhmad7548 Date: Thu, 10 Jul 2025 14:57:14 +0500 Subject: [PATCH] server private key conf and remove debug prints --- .gitignore | 2 ++ src/config.rs | 6 ++++-- src/main.rs | 11 ++++------- src/sftp.rs | 14 -------------- 4 files changed, 10 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index 2eac0a2..b7cc3ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /target sftptest sftptest.pub +server +server.pub diff --git a/src/config.rs b/src/config.rs index 811d9c7..05c2873 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,7 +10,8 @@ pub(crate) struct Config { pub(crate) struct GeneralConfig { pub(crate) listen_address: String, pub(crate) port: u16, - pub(crate) jail_dir: String + pub(crate) jail_dir: String, + pub(crate) private_key_file: String } #[derive(Serialize, Deserialize, Clone)] @@ -61,7 +62,8 @@ impl Default for Config { general: GeneralConfig { listen_address: String::from("0.0.0.0"), port: 2222, - jail_dir: String::from("/srv/sftp") + jail_dir: String::from("/srv/sftp"), + private_key_file: String::from("~/.ssh/flux-sftp") }, database: DBConfig { driver: DriverConfig::Sqlite { diff --git a/src/main.rs b/src/main.rs index 85d5d45..915b74a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,10 @@ mod sftp; mod config; -use std::{fmt::format, io::ErrorKind, net::SocketAddr, sync::Arc, time::Duration}; +use std::{io::ErrorKind, net::SocketAddr, path::Path, sync::Arc, time::Duration}; use bcrypt::{hash, DEFAULT_COST}; use config::{Config, DriverConfig}; -use russh::{keys::ssh_key::{rand_core::OsRng, PublicKey}, server::{Auth, Handler as SshHandler, Msg, Server, Session}, Channel, ChannelId}; +use russh::{keys::ssh_key::PublicKey, server::{Auth, Handler as SshHandler, Msg, Server, Session}, Channel, ChannelId}; use sftp::SftpSession; use sqlx::{mysql::MySqlPoolOptions, postgres::PgPoolOptions, sqlite::SqlitePoolOptions, MySql, Pool, Postgres, Row, Sqlite}; use tokio::fs; @@ -151,9 +151,6 @@ enum DBPool { #[tokio::main] async fn main() -> Result<(), sqlx::Error> { - // let config = Config::default(); - // let toml = toml::to_string(&config).unwrap(); - // println!("{}", toml); const CONFIG_PATH: &str = "/etc/flux-sftp/config.toml"; let config: Arc; @@ -195,11 +192,11 @@ async fn main() -> Result<(), sqlx::Error> { auth_rejection_time: Duration::from_secs(3), auth_rejection_time_initial: Some(Duration::from_secs(0)), keys: vec![ - russh::keys::PrivateKey::random(&mut OsRng, russh::keys::Algorithm::Ed25519).unwrap(), + russh::keys::PrivateKey::read_openssh_file(Path::new(&config.general.private_key_file)).unwrap() ], ..Default::default() }; - server.run_on_address(Arc::new(russh_config), (&config.general.listen_address as &str, config.general.port)).await.unwrap(); + server.run_on_address(Arc::new(russh_config), (&config.general.listen_address as &str, config.general.port)).await?; Ok(()) } diff --git a/src/sftp.rs b/src/sftp.rs index 126af41..25d80bf 100644 --- a/src/sftp.rs +++ b/src/sftp.rs @@ -53,7 +53,6 @@ impl SftpHandler for SftpSession { id: u32, path: String, ) -> Result { - println!("realpath called, path: {}", path); let re_1 = Regex::new(r"/[^/]+/\.\.").unwrap(); self.cwd = re_1.replace_all(&path, "").to_string(); @@ -78,9 +77,6 @@ impl SftpHandler for SftpSession { pflags: OpenFlags, _attrs: FileAttributes, ) -> Result { - println!("open called, path: {}", filename); - println!("pflags raw: {:b}", pflags.bits()); - println!("pflags: read: {}, write: {}, append: {}, create: {}, truncate: {}", pflags.contains(OpenFlags::READ), pflags.contains(OpenFlags::WRITE), pflags.contains(OpenFlags::APPEND), pflags.contains(OpenFlags::CREATE), pflags.contains(OpenFlags::TRUNCATE)); let path = format!("{}{}", self.jail_dir, filename); if pflags.contains(OpenFlags::EXCLUDE) && fs::metadata(&path).await.is_ok() { return Err(StatusCode::Failure) @@ -156,7 +152,6 @@ impl SftpHandler for SftpSession { offset: u64, data: Vec, ) -> Result { - println!("write called, offset: {}, data: {:?}", offset, String::from_utf8(data.clone())); if let Handle::File(file) = self.handles.get_mut(&handle).unwrap() { match file.seek(SeekFrom::Start(offset)).await { Ok(_) => { @@ -192,7 +187,6 @@ impl SftpHandler for SftpSession { id: u32, path: String, ) -> Result { - println!("opendir called: {}", path); let path = format!("{}{}", self.jail_dir, path); match fs::read_dir(&path).await { Ok(entries) => { @@ -250,7 +244,6 @@ impl SftpHandler for SftpSession { id: u32, handle: String, ) -> Result { - println!("close called"); self.handles.remove(&handle); Ok(Status { id, @@ -265,7 +258,6 @@ impl SftpHandler for SftpSession { id: u32, path: String, ) -> Result { - println!("stat called: {}", path); let path = format!("{}{}", self.jail_dir, path); match fs::metadata(path).await { Ok(metadata) => Ok(Attrs { id, attrs: FileAttributes { @@ -284,7 +276,6 @@ impl SftpHandler for SftpSession { id: u32, path: String, ) -> Result { - println!("lstat called: {}", path); let path = format!("{}{}", self.jail_dir, path); match fs::symlink_metadata(path).await { Ok(metadata) => Ok(Attrs { id, attrs: FileAttributes { @@ -304,7 +295,6 @@ impl SftpHandler for SftpSession { id: u32, handle: String, ) -> Result { - println!("fstat called: {}", handle); if let Handle::File(file) = self.handles.get(&handle).unwrap() { let metadata = file.metadata().await.unwrap(); Ok(Attrs { id, attrs: FileAttributes { @@ -327,7 +317,6 @@ impl SftpHandler for SftpSession { id: u32, filename: String, ) -> Result { - println!("remove called: {}", filename); let path = format!("{}{}", self.jail_dir, filename); match_expr!(fs::remove_file(path).await, "error removing file: {}", id) } @@ -338,7 +327,6 @@ impl SftpHandler for SftpSession { path: String, _attrs: FileAttributes, ) -> Result { - println!("mkdir called: {}", path); let path = format!("{}{}", self.jail_dir, path); match_expr!(fs::create_dir(path).await, "error creating dir: {}", id) } @@ -348,7 +336,6 @@ impl SftpHandler for SftpSession { id: u32, path: String, ) -> Result { - println!("rmdir called: {}", path); let path = format!("{}{}", self.jail_dir, path); match_expr!(fs::remove_dir(path).await, "error removing file: {}", id) } @@ -359,7 +346,6 @@ impl SftpHandler for SftpSession { oldpath: String, newpath: String, ) -> Result { - println!("rename called from: {}, to: {}", oldpath, newpath); let oldpath = format!("{}{}", self.jail_dir, oldpath); let newpath = format!("{}{}", self.jail_dir, newpath); match_expr!(fs::rename(oldpath, newpath).await, "error renaming file: {}", id)