@@ -31,11 +31,16 @@ def run_benchmarks(args: argparse.Namespace) -> int:
3131 logger .error ("Hetzner Cloud token required. Set HCLOUD_TOKEN or use --token" )
3232 return 1
3333
34+ # Determine SSH key name - either explicit or derive from key file
35+ ssh_key_name = args .ssh_key_name
36+ if not ssh_key_name and args .ssh_key :
37+ ssh_key_name = "csp-benchmarks"
38+
3439 # Configure server
3540 server_config = ServerConfig (
3641 name = args .server_name ,
3742 server_type = args .server_type ,
38- ssh_key_name = args . ssh_key_name ,
43+ ssh_key_name = ssh_key_name ,
3944 )
4045
4146 # Configure benchmarks
@@ -48,6 +53,24 @@ def run_benchmarks(args: argparse.Namespace) -> int:
4853 server = None
4954
5055 try :
56+ # Upload SSH public key to Hetzner if we have a private key
57+ if args .ssh_key and ssh_key_name :
58+ pub_key_path = args .ssh_key + ".pub"
59+ if os .path .exists (pub_key_path ):
60+ with open (pub_key_path ) as f :
61+ public_key = f .read ().strip ()
62+ manager .ensure_ssh_key (public_key , ssh_key_name )
63+ else :
64+ # Try to generate public key from private key
65+ import subprocess
66+
67+ result = subprocess .run (["ssh-keygen" , "-y" , "-f" , args .ssh_key ], capture_output = True , text = True )
68+ if result .returncode == 0 :
69+ public_key = result .stdout .strip ()
70+ manager .ensure_ssh_key (public_key , ssh_key_name )
71+ else :
72+ logger .warning (f"Could not extract public key from { args .ssh_key } " )
73+
5174 # Check if server already exists
5275 server = manager .get_server ()
5376 if server and not args .reuse :
0 commit comments