A Go library for parsing, modifying, and writing SSH config files while preserving comments and formatting.
- Parse SSH config files with full preservation of formatting, whitespace, and comments
- Modify existing SSH config entries
- Add new host configurations
- Delete host entries
- Write modified configs back to files
go get github.com/patrikkj/sshconf// Parse from a file
config, err := sshconf.ParseConfigFile("~/.ssh/config")
if err != nil {
log.Fatal(err)
}
// Parse from a string
configStr := `Host example
HostName example.com
User admin`
config := sshconf.ParseConfig(configStr)// Patch (update or append) a host entry
err := config.Patch("Host example", `Host example
HostName example.com
User admin
Port 2222`)
// Delete a host entry
err := config.Delete("Host example")// Write to a file
err := config.WriteFile("~/.ssh/config")
// Write to any io.Writer
err := config.Write(os.Stdout)
// Get config as string
configStr := config.Render()package main
import (
"fmt"
"github.com/patrikkj/sshconf"
)
func main() {
// Parse existing config
config, err := sshconf.ParseConfigFile("~/.ssh/config")
if err != nil {
panic(err)
}
// Add or update a host entry
err = config.Patch("Host example", `Host example
HostName example.com
User admin
Port 2222
IdentityFile ~/.ssh/example_key`)
if err != nil {
panic(err)
}
// Write the modified config back
err = config.WriteFile("~/.ssh/config")
if err != nil {
panic(err)
}
}- Preserves comments and formatting when parsing and writing
- Maintains indentation styles
- Supports all SSH config directives
- Handles multi-level configurations (e.g., Match blocks)
[Your chosen license]