1
0
Fork 0
mirror of https://github.com/imjasonh/chessh synced 2026-07-18 14:46:31 +00:00

use ssh host key from secret manager

Signed-off-by: Jason Hall <jason@chainguard.dev>
This commit is contained in:
Jason Hall 2025-09-13 23:03:26 -04:00
parent bcb0b711e5
commit 3cfc28cc99
7 changed files with 43 additions and 99 deletions

24
main.go
View file

@ -13,8 +13,9 @@ import (
"syscall"
"time"
secretmanager "cloud.google.com/go/secretmanager/apiv1"
"cloud.google.com/go/secretmanager/apiv1/secretmanagerpb"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/keygen"
"github.com/charmbracelet/ssh"
"github.com/charmbracelet/wish"
"github.com/charmbracelet/wish/bubbletea"
@ -492,21 +493,22 @@ func main() {
var sshPort = flag.Int("port", 2222, "run as SSH server")
flag.Parse()
// Generate host key if it doesn't exist
if err := os.MkdirAll(".ssh", 0700); err != nil {
log.Fatalln("Failed to create .ssh directory:", err)
ctx := context.Background()
client, err := secretmanager.NewClient(ctx)
if err != nil {
log.Fatalf("failed to create Secret Manager client: %v", err)
}
hostKeyPath := ".ssh/chess_host_key"
if _, err := os.Stat(hostKeyPath); os.IsNotExist(err) {
log.Println("Generating SSH host key...")
if _, err := keygen.New(hostKeyPath, keygen.WithKeyType(keygen.Ed25519)); err != nil {
log.Fatalln("Failed to generate host key:", err)
}
defer client.Close()
resp, err := client.AccessSecretVersion(ctx, &secretmanagerpb.AccessSecretVersionRequest{
Name: os.Getenv("SSH_HOST_KEY_SECRET"),
})
if err != nil {
log.Fatalf("failed to access secret version: %v", err)
}
s, err := wish.NewServer(
wish.WithAddress(fmt.Sprintf(":%d", *sshPort)),
wish.WithHostKeyPath(hostKeyPath),
wish.WithHostKeyPEM(resp.Payload.Data),
wish.WithMiddleware(
bubbletea.Middleware(func(s ssh.Session) (tea.Model, []tea.ProgramOption) {
// Create player from SSH session