Skip to main content

ssh_cli/
lib.rs

1//! # ssh-cli
2//!
3//! CLI Rust full-stack que dá a uma LLM (Claude Code, Cursor, Windsurf) a capacidade
4//! de operar servidores remotos via SSH em um fluxo de subprocesso via stdin/stdout.
5//!
6//! ## Módulos
7//!
8//! | Módulo          | Responsabilidade                                              |
9//! |-----------------|---------------------------------------------------------------|
10//! | `cli`           | Definição de argumentos via `clap` derive e dispatcher        |
11//! | `vps`           | CRUD e persistência de registros de VPS (XDG + TOML + 0o600)  |
12//! | `secrets`       | Master-key e cifragem at-rest default (ChaCha20-Poly1305)      |
13//! | `ssh`           | Cliente SSH one-shot real via `russh` (auth senha/chave, TOFU) |
14//! | `i18n`          | Internacionalização com enum `Mensagem` bilíngue              |
15//! | `locale`        | Detecção e resolução de locale do sistema operacional         |
16//! | `platform`      | Ajustes de plataforma (UTF-8 Windows, detecção TTY)           |
17//! | `mascaramento`  | Mascaramento Unicode-safe de valores sensíveis                |
18//! | `erros`         | Tipos de erro estruturados via `thiserror`                    |
19//! | `output`        | Único módulo autorizado a `println!` (formatação CRUD)        |
20//! | `paths`         | Validação e normalização de caminhos (anti-traversal, NFC)    |
21//! | `signals`       | Handler de Ctrl+C com flag de cancelamento via `AtomicBool`   |
22//! | `terminal`      | Detecção de TTY e escolha de cor via `termcolor`              |
23//!
24//! ## Entry point
25//!
26//! A função pública [`run`] é o ponto de entrada chamado por `main.rs`.
27
28#![cfg_attr(docsrs, feature(doc_cfg))]
29#![warn(missing_docs)]
30#![warn(rust_2018_idioms)]
31
32pub mod cli;
33pub mod erros;
34pub mod i18n;
35pub mod locale;
36pub mod mascaramento;
37pub mod output;
38pub mod paths;
39pub mod platform;
40pub mod scp;
41pub mod secrets;
42pub mod signals;
43pub mod ssh;
44pub mod terminal;
45pub mod tunnel;
46pub mod vps;
47
48use anyhow::Result;
49
50/// Executa o ssh-cli a partir dos argumentos da linha de comando.
51///
52/// Esta é a função pública chamada por `main.rs`. Ela:
53/// 1. Registra o handler de Ctrl+C para cancelamento gracioso.
54/// 2. Inicializa a plataforma (codepage Windows UTF-8, detecção de TTY).
55/// 3. Faz parsing dos argumentos via clap.
56/// 4. Inicializa logs via `tracing-subscriber`.
57/// 5. Inicializa configuração de cor do terminal.
58/// 6. Inicializa i18n com o idioma detectado.
59/// 7. Despacha para o subcomando apropriado (`vps`, `connect`, `exec`, `sudo-exec`, `scp`, `tunnel`).
60pub async fn run() -> Result<()> {
61    signals::registrar_handler()?;
62
63    platform::inicializar_plataforma()?;
64
65    let argumentos = cli::parse_args();
66
67    cli::inicializar_logs(&argumentos);
68
69    terminal::inicializar(argumentos.no_color)?;
70
71    i18n::inicializar_idioma(argumentos.lang.as_deref())?;
72
73    cli::executar(argumentos).await
74}