ssh: Implement authentication for new ssh server

This commit is contained in:
Tom Wiesing 2022-11-11 14:47:10 +01:00
parent 66b397e9da
commit 45f63935cd
No known key found for this signature in database
10 changed files with 259 additions and 1 deletions

View file

@ -1,6 +1,8 @@
package barrel
import (
"path/filepath"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/locker"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/mstore"
@ -13,3 +15,11 @@ type Barrel struct {
Locker *locker.Locker
MStore *mstore.MStore
}
func (barrel *Barrel) DataPath() string {
return filepath.Join(barrel.FilesystemBase, "data")
}
func (barrel *Barrel) AuthorizedKeysPath() string {
return filepath.Join(barrel.DataPath(), "authorized_keys")
}

View file

@ -0,0 +1,32 @@
package ssh
import (
"io"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel"
"github.com/FAU-CDI/wisski-distillery/pkg/environment"
"github.com/FAU-CDI/wisski-distillery/pkg/sshx"
"github.com/gliderlabs/ssh"
)
type SSH struct {
ingredient.Base
Barrel *barrel.Barrel
}
func (ssh *SSH) Keys() ([]ssh.PublicKey, error) {
file, err := ssh.Environment.Open(ssh.Barrel.AuthorizedKeysPath())
if environment.IsNotExist(err) {
return nil, nil
}
if err != nil {
return nil, err
}
bytes, err := io.ReadAll(file)
if err != nil {
return nil, err
}
return sshx.ParseAllKeys(bytes), nil
}

View file

@ -8,6 +8,7 @@ import (
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/drush"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/provisioner"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/ssh"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/bookkeeping"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/info"
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/locker"
@ -76,6 +77,10 @@ func (wisski *WissKI) Info() *info.Info {
return export[*info.Info](wisski)
}
func (wisski *WissKI) SSH() *ssh.SSH {
return export[*ssh.SSH](wisski)
}
//
// All components
// THESE SHOULD NEVER BE CALLED DIRECTLY
@ -112,5 +117,7 @@ func (wisski *WissKI) allIngredients() []initFunc {
auto[*drush.Drush],
auto[*reserve.Reserve],
auto[*ssh.SSH],
}
}