Includes a golang library, API server and client library, and a CLI tool with support for working locally or via a remote server.
Beta. Key management and most extra features (api, client-server mode) work.
- no locking is present (when attempting to add multiple keys from multiple goroutines to one user at the same time, chances are only one will be added)
Please be responsible and contact me directly at glebtv [at] gmail.com in case you find security issues.
$ go get github.com/rs-pro/sshkeymanager
package main
import (
"fmt"
"github.com/rs-pro/sshkeymanager"
"log"
)
func main() {
host := "host.name"
port := "22"
client := sshkeymanager.NewClient(host, port, sshkeymanager.DefaultConfig)
users, err := client.GetUsers()
users, err := c.GetUsers()
if err != nil {
log.Println(err)
}
for _, u := range users {
fmt.Printf("UID: %v\nUsername: %v\nHome dir: %v\nShell: %v\n\n", u.UID, u.Name, u.Home, u.Shell)
}
uid := "3104"
keys, err := c.GetKeys(uid)
if err != nil {
log.Println(err)
}
for _, k := range keys {
fmt.Printf("String num: %d\nKey: %s\nEmail: %v\n\n", k.Num, k.Key, k.Email)
}
key1 := "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqF4hRYsFzO3ylja7wPxut+vu6y2VhYmfOz5wMHuP7XpUvoK/O6Red4bOUAPgexHzRw5kRAKYnaIoMPjNQYCSIhr5xNLwkZTWBxKQ48pLkuBC0yrm+ePXe8sjdFq/0ctPMYX2ZAKYUledoAeb/JbE+zPCEnzhUUqq9pkqGkJJ7I3Fp6uaRx+DELYggIHs6gqWgXLHGdaGkGPNs1xoG4EFwHOx51Jlp1IKAktRjooM9rqPV/TUkM02CoR0VncWbkgDja2lSywdFb8e8keFvbBSPYsB40VMSpXroRJjQ5eQyJlaVyuodXkKGuJmd/5lEZrtQQLISspAjYF2cFgJSsvzz [email protected]"
err = c.AddKey(key1, uid)
if err != nil {
fmt.Println(err)
}
err = c.DeleteKey(key1, uid)
if err != nil {
fmt.Println(err)
}
// Closing connection
err = c.CloseConnection()
}
Create config.yml (see example)
KEY_PASS=your-ssh-key-passphrase go run cmd/sshkeyserver/main.go
go run cmd/sshkeymanager/main.go --keyserver http://localhost:12010 --apikey your-key --host r8s.ru list-users
env DEBUG=YES INSECURE_IGNORE_HOST_KEY=YES go test -v ./...
MIT License