feat(ssh): make inactivity timeout configurable (#990)

With this change, the SSH inactivity timeout is now configurable. By
default, is set at 5 minutes (300 seconds), which was the already
existing value.

Solves #943
This commit is contained in:
Néfix Estrada 2024-05-31 12:52:27 +02:00 committed by GitHub
parent 72236d004a
commit 9582a6e0ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 9 additions and 1 deletions

View file

@ -79,3 +79,7 @@ pub(crate) fn _default_ssh_listen() -> ListenEndpoint {
pub(crate) fn _default_ssh_keys_path() -> String { pub(crate) fn _default_ssh_keys_path() -> String {
"./data/keys".to_owned() "./data/keys".to_owned()
} }
pub(crate) fn _default_ssh_inactivity_timeout() -> Duration {
Duration::SECOND * 60 * 5
}

View file

@ -118,6 +118,9 @@ pub struct SshConfig {
#[serde(default)] #[serde(default)]
pub host_key_verification: SshHostKeyVerificationMode, pub host_key_verification: SshHostKeyVerificationMode,
#[serde(default = "_default_ssh_inactivity_timeout", with = "humantime_serde")]
pub inactivity_timeout: Duration,
} }
impl Default for SshConfig { impl Default for SshConfig {
@ -128,6 +131,7 @@ impl Default for SshConfig {
keys: _default_ssh_keys_path(), keys: _default_ssh_keys_path(),
host_key_verification: Default::default(), host_key_verification: Default::default(),
external_port: None, external_port: None,
inactivity_timeout: _default_ssh_inactivity_timeout(),
} }
} }
} }

View file

@ -27,7 +27,7 @@ pub async fn run_server(services: Services, address: SocketAddr) -> Result<()> {
russh::server::Config { russh::server::Config {
auth_rejection_time: Duration::from_secs(1), auth_rejection_time: Duration::from_secs(1),
auth_rejection_time_initial: Some(Duration::from_secs(0)), auth_rejection_time_initial: Some(Duration::from_secs(0)),
inactivity_timeout: Some(Duration::from_secs(300)), inactivity_timeout: Some(config.store.ssh.inactivity_timeout),
methods: MethodSet::PUBLICKEY | MethodSet::PASSWORD | MethodSet::KEYBOARD_INTERACTIVE, methods: MethodSet::PUBLICKEY | MethodSet::PASSWORD | MethodSet::KEYBOARD_INTERACTIVE,
keys: load_host_keys(&config)?, keys: load_host_keys(&config)?,
event_buffer_size: 100, event_buffer_size: 100,