pub struct SshConfig { /* private fields */ }Expand description
Describes the ssh configuration. Configuration is described in this document: http://man.openbsd.org/OpenBSD-current/man5/ssh_config.5
Implementations§
Source§impl SshConfig
impl SshConfig
Sourcepub fn from_hosts(hosts: Vec<Host>) -> Self
pub fn from_hosts(hosts: Vec<Host>) -> Self
Constructs a new SshConfig from a list of Hosts.
You can later also set the DefaultAlgorithms using SshConfig::default_algorithms.
Sourcepub fn query<S: AsRef<str>>(&self, pattern: S) -> HostParams
pub fn query<S: AsRef<str>>(&self, pattern: S) -> HostParams
Query params for a certain host. Returns HostParams for the host.
Sourcepub fn intersecting_hosts(&self, pattern: &str) -> impl Iterator<Item = &Host>
pub fn intersecting_hosts(&self, pattern: &str) -> impl Iterator<Item = &Host>
Get an iterator over the Hosts which intersect with the given host pattern
Sourcepub fn default_algorithms(self, algos: DefaultAlgorithms) -> Self
pub fn default_algorithms(self, algos: DefaultAlgorithms) -> Self
Set default algorithms for ssh.
If you want to use the default algorithms from the system, you can use the Default::default() method.
Sourcepub fn home_dir(self, home_dir: impl Into<PathBuf>) -> Self
pub fn home_dir(self, home_dir: impl Into<PathBuf>) -> Self
Sets the home directory used to resolve ~ and relative Include paths.
A leading ~ or ~/ is expanded against this directory, and relative Include
paths are resolved against <home>/.ssh. Other ~-prefixed paths, such as ~user/...,
are kept as-is in both Include and path options such as IdentityFile; an Include
pattern that matches no file is skipped. When it is not set, the home directory is taken
from dirs::home_dir.
§Examples
use std::io::BufReader;
use std::path::PathBuf;
use ssh2_config::{ParseRule, SshConfig};
let mut reader = BufReader::new("IdentityFile ~/.ssh/id_ed25519\n".as_bytes());
let config = SshConfig::default()
.home_dir("/home/alice")
.parse(&mut reader, ParseRule::STRICT)
.expect("Failed to parse configuration");
assert_eq!(
config.query("any").identity_file,
Some(vec![PathBuf::from("/home/alice/.ssh/id_ed25519")])
);Sourcepub fn parse(
self,
reader: &mut impl BufRead,
rules: ParseRule,
) -> SshParserResult<Self>
pub fn parse( self, reader: &mut impl BufRead, rules: ParseRule, ) -> SshParserResult<Self>
Parse SshConfig from stream which implements BufRead and return parsed configuration or parser error
~ is expanded against the home set with SshConfig::home_dir, or against
dirs::home_dir when none is set, and relative Include paths are resolved against
<home>/.ssh.
§Example
let mut reader = BufReader::new(
File::open(Path::new("./assets/ssh.config"))
.expect("Could not open configuration file")
);
let config = SshConfig::default().parse(&mut reader, ParseRule::STRICT).expect("Failed to parse configuration");Sourcepub fn parse_default_file(rules: ParseRule) -> SshParserResult<Self>
pub fn parse_default_file(rules: ParseRule) -> SshParserResult<Self>
Parse ~/.ssh/config`` file and return parsed configuration [SshConfig`] or parser error
The file and every ~ or relative Include path in it are resolved against
dirs::home_dir. To parse the configuration of another home, open <home>/.ssh/config
and parse it with SshConfig::home_dir set, as shown below.
§Examples
use std::fs::File;
use std::io::BufReader;
use std::path::Path;
use ssh2_config::{ParseRule, SshConfig};
let home = Path::new("/home/alice");
let mut reader = BufReader::new(
File::open(home.join(".ssh").join("config")).expect("Could not open configuration file"),
);
let config = SshConfig::default()
.home_dir(home)
.parse(&mut reader, ParseRule::STRICT)
.expect("Failed to parse configuration");