3 Commits
rust ... main

Author SHA1 Message Date
14a6bc6e3d catch connect error 2024-08-19 00:50:29 +02:00
1f3dcbbc08 print port, remove new line from authorized_keys2 file 2024-08-19 00:41:39 +02:00
51ccf1c848 update warnings 2024-07-10 00:27:26 +02:00

View File

@@ -21,13 +21,13 @@ fn upload_config(h: &Host) -> Result<String, String> {
let host = h.host.lock().unwrap().to_owned(); let host = h.host.lock().unwrap().to_owned();
let port = h.port; let port = h.port;
let username = h.username.lock().unwrap().to_owned(); let username = h.username.lock().unwrap().to_owned();
let private_key = PathBuf::from(format!("{}/.ssh/id_ed25519", env!("HOME"))); let private_key = PathBuf::from("/Users/toby/.ssh/id_ed25519");
let content = h.content.lock().unwrap(); let content = h.content.lock().unwrap();
let connection_string = format!("{}@{}", username, host); let connection_string = format!("{}@{}:{}", username, host, port);
let addr: SocketAddr = match format!("{}:{}", host, port).to_socket_addrs() { let addr: SocketAddr = match format!("{}:{}", host, port).to_socket_addrs() {
Ok(mut addrs) => addrs.nth(0).expect(format!("Invalid host/port in `{}:{}`", host, port).as_str()), Ok(mut addrs) => addrs.nth(0).expect(format!("Invalid host/port in `{}:{}`", host, port).as_str()),
Err(_) => return Err(connection_string) _ => return Err(connection_string)
}; };
let tcp: TcpStream = match TcpStream::connect_timeout(&addr, Duration::from_secs(3)) { let tcp: TcpStream = match TcpStream::connect_timeout(&addr, Duration::from_secs(3)) {
@@ -35,22 +35,15 @@ fn upload_config(h: &Host) -> Result<String, String> {
Err(_) => return Err(connection_string) Err(_) => return Err(connection_string)
}; };
let mut sess = match Session::new() { let mut sess = Session::new().unwrap();
Ok(s) => s,
Err(_) => return Err(connection_string)
};
sess.set_tcp_stream(tcp); sess.set_tcp_stream(tcp);
sess.handshake().unwrap();
match sess.handshake() {
Ok(()) => (),
Err(_) => return Err(connection_string)
};
match sess.userauth_pubkey_file(&username, None, &private_key, None) { match sess.userauth_pubkey_file(&username, None, &private_key, None) {
Ok(()) => (), Err(_) => return Err(connection_string),
Err(_) => return Err(connection_string) _ => {}
}; }
let mut remote_file = match sess.scp_send(Path::new(".ssh").join("authorized_keys2").as_path(), 0o644, content.len() as u64, None) { let mut remote_file = match sess.scp_send(Path::new(".ssh").join("authorized_keys2").as_path(), 0o644, content.len() as u64, None) {
Ok(rf) => rf, Ok(rf) => rf,
@@ -62,31 +55,16 @@ fn upload_config(h: &Host) -> Result<String, String> {
Err(_) => return Err(connection_string) Err(_) => return Err(connection_string)
}; };
match remote_file.send_eof() { remote_file.send_eof().unwrap();
Ok(()) => (), remote_file.wait_eof().unwrap();
Err(_) => return Err(connection_string) remote_file.close().unwrap();
}; remote_file.wait_close().unwrap();
match remote_file.wait_eof() {
Ok(()) => (),
Err(_) => return Err(connection_string)
};
match remote_file.close() {
Ok(()) => (),
Err(_) => return Err(connection_string)
};
match remote_file.wait_close() {
Ok(()) => (),
Err(_) => return Err(connection_string)
};
Ok(connection_string) Ok(connection_string)
} }
fn generate_authorized_keys(host_keys: Vec<String>) -> String { fn generate_authorized_keys(host_keys: Vec<String>) -> String {
format!("###\n# Warning this file has been generated and will be overwritten!\n###\n\n{}\n", host_keys.join("\n")) format!("###\n# Warning this file has been generated and will be overwritten!\n###\n{}\n", host_keys.join("\n"))
} }
fn main() { fn main() {
@@ -103,7 +81,7 @@ fn main() {
if user_data.contains_key("groups") { if user_data.contains_key("groups") {
for group in user_data["groups"].as_slice() { for group in user_data["groups"].as_slice() {
if !config.groups.contains_key(group) { if !config.groups.contains_key(group) {
println!("WARNING: Key-group \"{}\" not found!", group); eprintln!("\x1b[93mWARNING\x1b[0m: Key-group \"{}\" not found! Skipping...", group);
continue; continue;
} }
for key_name in config.groups[group].as_slice() { for key_name in config.groups[group].as_slice() {
@@ -117,7 +95,7 @@ fn main() {
if user_data.contains_key("keys") { if user_data.contains_key("keys") {
for key_name in user_data["keys"].as_slice() { for key_name in user_data["keys"].as_slice() {
if !config.keys.contains_key(key_name) { if !config.keys.contains_key(key_name) {
println!("WARNING: Key \"{}\" not found!", key_name); eprintln!("\x1b[93mWARNING\x1b[0m: Key \"{}\" not found! Skipping...", key_name);
continue; continue;
} }
host_keys.push(config.keys.get(key_name).unwrap().to_string()) host_keys.push(config.keys.get(key_name).unwrap().to_string())