bssh 2.4.3

Parallel SSH command execution tool for cluster management
Documentation
// Copyright 2025 Lablup Inc. and Jeongkyu Shin
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

use crate::security::Password;
use crate::ssh::known_hosts::StrictHostKeyChecking;
use crate::ssh::tokio_client::{SshConnectionConfig, SshConnectionConfigResolver};
use std::path::Path;
use std::sync::Arc;

/// Configuration for SSH connection and command execution
#[derive(Clone)]
pub struct ConnectionConfig<'a> {
    pub key_path: Option<&'a Path>,
    pub strict_mode: Option<StrictHostKeyChecking>,
    pub use_agent: bool,
    pub use_password: bool,
    #[cfg(target_os = "macos")]
    pub use_keychain: bool,
    pub timeout_seconds: Option<u64>,
    pub connect_timeout_seconds: Option<u64>,
    pub jump_hosts_spec: Option<&'a str>,
    /// SSH keepalive / inactivity settings. `None` falls back to defaults.
    pub ssh_connection_config: Option<&'a SshConnectionConfig>,
    /// Per-host connection settings resolver used by jump chains.
    pub ssh_connection_config_resolver: Option<&'a SshConnectionConfigResolver>,
    /// Pre-collected SSH password shared with every per-node auth task.
    ///
    /// When `use_password` is `true`, this MUST be `Some(_)`; the dispatcher
    /// is responsible for prompting once up-front and threading the value
    /// through. `None` means "no pre-collected password" — `auth.rs` then
    /// falls back to its in-task prompt (used for the OpenSSH-style
    /// password-fallback path only).
    pub ssh_password: Option<Arc<Password>>,
}