This document describes how the Sketch SSH system implements mutual authentication between the host machine and containers using certificate-based authentication.
The Sketch SSH system uses a certificate-based approach to establish mutual trust between the host machine and containers. This ensures that:
sequenceDiagram participant User participant Host as Host Machine (LocalSSHimmer) participant Container as Container (SSH Server) participant Client as SSH Client (ssh/VSCode) %% Setup phase Note over Host,Container: Initialization Phase Host->>Host: Generate Container CA keys Host->>Host: Generate host certificate signed by Container CA Host->>Host: Generate user identity keys Host->>Host: Generate server identity keys Host->>Container: Init Container with:<br/>- Server identity<br/>- User public key<br/>- Container CA public key<br/>- Host certificate Container->>Container: Start SSH server with certificate verification %% Connection phase Note over Host,Container: Connection Phase User->>Client: Request SSH connection to container Client->>Host: Get SSH config from ~/.ssh/config Host->>Client: Config with:<br/>- Host identity path<br/>- Host certificate path Client->>Container: Connect with host certificate Container->>Container: Verify client certificate<br/>is signed by Container CA opt Mutual Authentication Container->>Client: Challenge for host certificate Client->>Container: Present host certificate Container->>Container: Verify host certificate<br/>is for 'root' user<br/>from localhost only end alt Valid Certificate Container->>Client: Accept connection Client->>User: Establish shell session else Invalid Certificate Container->>Client: Reject connection Client->>User: Authentication failed end
@cert-authority localhost,127.0.0.1,[::1] directive to trust only localhost certificatesDefense in Depth Security:
Localhost Restriction:
Seamless User Experience:
~/.config/sketch/container_ca: Container CA private key~/.config/sketch/container_ca.pub: Container CA public key~/.config/sketch/host_cert: Host certificate signed by Container CA~/.config/sketch/container_user_identity: User identity for SSH connections~/.config/sketch/container_server_identity: Server identity for container SSH serverLocalSSHimmer uses a hybrid approach to balance security and practicality:
Localhost-Restricted CA Trust for host verification:
@cert-authority localhost,127.0.0.1,[::1] entry in known_hostsIndividual Host Entries in SSH config:
This approach maintains the convenience of "ssh container-name" commands while leveraging the security benefits of certificate-based authentication.
The system is designed to support multiple concurrent Sketch instances:
This approach allows multiple Sketch instances to run concurrently while preserving the security benefits of certificate-based authentication.