From 34e810b6111101934b79a1cd09a428e64ea65879 Mon Sep 17 00:00:00 2001 From: Maxime Van Hees Date: Wed, 16 Jul 2025 10:57:19 +0200 Subject: [PATCH] inject all ssh keys by default is non are provided --- README.md | 2 +- src/async_handler.rs | 18 +++++++++++++++++- src/rhai_api.rs | 2 +- test.rhai | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b84c4b9..c76522b 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ client.reboot(test_server.id); ``` #### Injecting SSH Keys into Rescue Mode -You can also inject SSH keys into the rescue image. The `enable_rescue_mode` function accepts an optional SSH key ID (integer) or an array of SSH key IDs. +You can also inject SSH keys into the rescue image. The `enable_rescue_mode` function accepts an optional SSH key ID (integer) or an array of SSH key IDs. If no keys are provided, all available SSH keys in your project will be automatically used. **Important:** The SSH keys must already exist in your Hetzner Cloud project. You can add them in the [Hetzner Cloud Console](https://console.hetzner.cloud/). For more details, refer to the [official documentation on enabling rescue mode](https://docs.hetzner.cloud/reference/cloud#server-actions-enable-rescue-mode-for-a-server). diff --git a/src/async_handler.rs b/src/async_handler.rs index e7b20c1..ad195d4 100644 --- a/src/async_handler.rs +++ b/src/async_handler.rs @@ -10,6 +10,7 @@ pub enum Request { RebootServer(HetznerClient, i64), ResetServer(HetznerClient, i64), EnableRescueMode(HetznerClient, i64, Vec), + EnableRescueModeWithAllKeys(HetznerClient, i64), DisableRescueMode(HetznerClient, i64), ListSshKeys(HetznerClient), } @@ -58,7 +59,22 @@ pub fn run_worker( Response::ResetServer(result) } Request::EnableRescueMode(client, server_id, ssh_keys) => { - let result = rt.block_on(client.enable_rescue_mode_for_server(server_id, ssh_keys)).map_err(|e| e.to_string()); + let result = rt + .block_on(client.enable_rescue_mode_for_server(server_id, ssh_keys)) + .map_err(|e| e.to_string()); + Response::EnableRescueMode(result) + } + Request::EnableRescueModeWithAllKeys(client, server_id) => { + let result = rt + .block_on(async { + let ssh_keys = client.list_ssh_keys().await?; + let ssh_key_ids: Vec = ssh_keys.into_iter().map(|k| k.0.id).collect(); + println!("Passing in the following ssh key ids: {:#?}", ssh_key_ids); + client + .enable_rescue_mode_for_server(server_id, ssh_key_ids) + .await + }) + .map_err(|e: Box| e.to_string()); Response::EnableRescueMode(result) } Request::DisableRescueMode(client, server_id) => { diff --git a/src/rhai_api.rs b/src/rhai_api.rs index 011de3b..d0eda48 100644 --- a/src/rhai_api.rs +++ b/src/rhai_api.rs @@ -120,7 +120,7 @@ pub fn register_hetzner_api( .register_fn("enable_rescue_mode", { let bridge = api_bridge.clone(); move |client: &mut HetznerClient, server_id: i64| { - bridge.call(Request::EnableRescueMode(client.clone(), server_id, Vec::new()), |response| { + bridge.call(Request::EnableRescueModeWithAllKeys(client.clone(), server_id), |response| { match response { Response::EnableRescueMode(result) => result.map_err(|e| e.into()), _ => Err("Unexpected response".into()), diff --git a/test.rhai b/test.rhai index df2c6bd..3a92306 100644 --- a/test.rhai +++ b/test.rhai @@ -17,7 +17,7 @@ print(test_server.show_details()); // Enable rescue mode flag on server // print(`Enabling rescue mode on server with ID: ${test_server.id}`); -// let root_password = client.enable_rescue_mode(test_server.id, 1337); +// let root_password = client.enable_rescue_mode(test_server.id); // print(`Root password is: ${root_password}`); // Enable rescue mode with multiple keys from array