{ config, pkgs, ... }: { # Make sure controlPath directory exists home.file.".ssh/c/.dummy".text = ""; programs.ssh = { enable = true; controlMaster = "auto"; controlPersist = "10m"; controlPath = "~/.ssh/c/%r@%n:%p"; hashKnownHosts = true; # We have to do this as text to gaurantee it's part of the last Host * block extraConfig = '' HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256 KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr VerifyHostKeyDNS ask VisualHostKey yes UpdateHostKeys ask ''; # Most hosts are set in private matchBlocks = { "*.cmu.edu" = { user = "atosini"; extraOptions = { GSSAPIAuthentication = "yes"; GSSAPIDelegateCredentials = "yes"; }; }; "github.com".extraOptions.ControlMaster = "no"; }; }; }