cubic 0.17.0

Cubic is a lightweight command line manager for virtual machines. It has a simple, daemon-less and rootless design. All Cubic virtual machines run isolated in the user context. Cubic is built on top of QEMU, KVM and cloud-init. Show all supported images: $ cubic images Create a new virtual machine instance: $ cubic create mymachine --image ubuntu:noble List all virtual machine instances: $ cubic instances Start an instance: $ cubic start <instance name> Stop an instance: $ cubic stop <instance name> Open a shell in the instance: $ cubic ssh <machine name> Copy a file from the host to the instance: $ cubic scp <path/to/host/file> <machine>:<path/to/guest/file> Copy a file from the instance to the hots: $ cubic scp <machine>:<path/to/guest/file> <path/to/host/file>
use crate::error::Error;
use rand_core::OsRng;
use ssh_key::{Algorithm, LineEnding, private::PrivateKey};
use std::path::Path;

#[derive(Default)]
pub struct SshKeyGenerator;

impl SshKeyGenerator {
    pub fn new() -> Self {
        Self
    }

    pub fn generate_key(&self, private_key_path: &Path) -> Result<(), Error> {
        PrivateKey::random(&mut OsRng, Algorithm::Ed25519)
            .map_err(Error::Ssh)?
            .write_openssh_file(private_key_path, LineEnding::LF)
            .map(|_| ())
            .map_err(Error::Ssh)
    }

    pub fn generate_public_key(&self, private_key_path: &Path) -> Result<String, Error> {
        PrivateKey::read_openssh_file(private_key_path)
            .map_err(Error::Ssh)?
            .public_key()
            .to_openssh()
            .map_err(Error::Ssh)
    }
}