Goit

Simple and lightweight Git web server
git clone https://git.omkov.net/Goit
git clone [email protected]:Goit
Log | Tree | Refs | README | Download

Goit/src/goit/ssh.go (70 lines, 1.2 KiB) -rw-r--r-- file download

44175af Jakob Wakeling 2025-01-03 15:33:07
0
// Copyright (C) 2025, Jakob Wakeling
44175af Jakob Wakeling 2025-01-03 15:33:07
1
// All rights reserved.
44175af Jakob Wakeling 2025-01-03 15:33:07
2
44175af Jakob Wakeling 2025-01-03 15:33:07
3
package goit
44175af Jakob Wakeling 2025-01-03 15:33:07
4
44175af Jakob Wakeling 2025-01-03 15:33:07
5
import (
44175af Jakob Wakeling 2025-01-03 15:33:07
6
	"fmt"
44175af Jakob Wakeling 2025-01-03 15:33:07
7
	"log"
44175af Jakob Wakeling 2025-01-03 15:33:07
8
	"os"
44175af Jakob Wakeling 2025-01-03 15:33:07
9
	"path/filepath"
44175af Jakob Wakeling 2025-01-03 15:33:07
10
44175af Jakob Wakeling 2025-01-03 15:33:07
11
	"github.com/Jamozed/Goit/src/util"
44175af Jakob Wakeling 2025-01-03 15:33:07
12
	"golang.org/x/crypto/ssh"
44175af Jakob Wakeling 2025-01-03 15:33:07
13
)
44175af Jakob Wakeling 2025-01-03 15:33:07
14
44175af Jakob Wakeling 2025-01-03 15:33:07
15
func UpdateAuthorizedKeys() error {
44175af Jakob Wakeling 2025-01-03 15:33:07
16
	if !Conf.EnableSSH {
44175af Jakob Wakeling 2025-01-03 15:33:07
17
		return nil
44175af Jakob Wakeling 2025-01-03 15:33:07
18
	}
44175af Jakob Wakeling 2025-01-03 15:33:07
19
44175af Jakob Wakeling 2025-01-03 15:33:07
20
	log.Println("Updating SSH authorized keys file")
44175af Jakob Wakeling 2025-01-03 15:33:07
21
de239c0 Jakob Wakeling 2025-01-04 17:24:50
22
	if err := os.MkdirAll(filepath.Join(os.Getenv("HOME"), ".ssh"), 0700); err != nil {
de239c0 Jakob Wakeling 2025-01-04 17:24:50
23
		return err
de239c0 Jakob Wakeling 2025-01-04 17:24:50
24
	}
de239c0 Jakob Wakeling 2025-01-04 17:24:50
25
44175af Jakob Wakeling 2025-01-03 15:33:07
26
	f, err := os.Create(filepath.Join(os.Getenv("HOME"), ".ssh", "authorized_keys"))
44175af Jakob Wakeling 2025-01-03 15:33:07
27
	if err != nil {
44175af Jakob Wakeling 2025-01-03 15:33:07
28
		return err
44175af Jakob Wakeling 2025-01-03 15:33:07
29
	}
44175af Jakob Wakeling 2025-01-03 15:33:07
30
	defer f.Close()
44175af Jakob Wakeling 2025-01-03 15:33:07
31
44175af Jakob Wakeling 2025-01-03 15:33:07
32
	f.WriteString("# This file is managed by Goit; edits will be overwritten.\n")
44175af Jakob Wakeling 2025-01-03 15:33:07
33
44175af Jakob Wakeling 2025-01-03 15:33:07
34
	/* Write each users SSH keys to the SSH authorized keys file. */
44175af Jakob Wakeling 2025-01-03 15:33:07
35
	users, err := GetUsers()
44175af Jakob Wakeling 2025-01-03 15:33:07
36
	if err != nil {
44175af Jakob Wakeling 2025-01-03 15:33:07
37
		return err
44175af Jakob Wakeling 2025-01-03 15:33:07
38
	}
44175af Jakob Wakeling 2025-01-03 15:33:07
39
44175af Jakob Wakeling 2025-01-03 15:33:07
40
	for _, u := range users {
44175af Jakob Wakeling 2025-01-03 15:33:07
41
		keys, err := GetKeys(u.Id)
44175af Jakob Wakeling 2025-01-03 15:33:07
42
		if err != nil {
44175af Jakob Wakeling 2025-01-03 15:33:07
43
			util.PrintFuncError(err)
44175af Jakob Wakeling 2025-01-03 15:33:07
44
			continue
44175af Jakob Wakeling 2025-01-03 15:33:07
45
		}
44175af Jakob Wakeling 2025-01-03 15:33:07
46
44175af Jakob Wakeling 2025-01-03 15:33:07
47
		for _, k := range keys {
44175af Jakob Wakeling 2025-01-03 15:33:07
48
			if k.Type != SSH_Auth {
44175af Jakob Wakeling 2025-01-03 15:33:07
49
				continue
44175af Jakob Wakeling 2025-01-03 15:33:07
50
			}
44175af Jakob Wakeling 2025-01-03 15:33:07
51
44175af Jakob Wakeling 2025-01-03 15:33:07
52
			ks, err := ssh.ParsePublicKey(k.Key)
44175af Jakob Wakeling 2025-01-03 15:33:07
53
			if err != nil {
44175af Jakob Wakeling 2025-01-03 15:33:07
54
				util.PrintFuncError(err)
44175af Jakob Wakeling 2025-01-03 15:33:07
55
				continue
44175af Jakob Wakeling 2025-01-03 15:33:07
56
			}
44175af Jakob Wakeling 2025-01-03 15:33:07
57
44175af Jakob Wakeling 2025-01-03 15:33:07
58
			if _, err := f.WriteString(
44175af Jakob Wakeling 2025-01-03 15:33:07
59
				fmt.Sprintf("command=\"goit-shell %s\" %s", u.Name, string(ssh.MarshalAuthorizedKey(ks))),
44175af Jakob Wakeling 2025-01-03 15:33:07
60
			); err != nil {
44175af Jakob Wakeling 2025-01-03 15:33:07
61
				util.PrintFuncError(err)
44175af Jakob Wakeling 2025-01-03 15:33:07
62
				continue
44175af Jakob Wakeling 2025-01-03 15:33:07
63
			}
44175af Jakob Wakeling 2025-01-03 15:33:07
64
		}
44175af Jakob Wakeling 2025-01-03 15:33:07
65
	}
44175af Jakob Wakeling 2025-01-03 15:33:07
66
44175af Jakob Wakeling 2025-01-03 15:33:07
67
	return nil
44175af Jakob Wakeling 2025-01-03 15:33:07
68
}
69